2009-07-07 64 views
0

有什么方法可以确定数据库中的差异是如何影响SSIS包加载性能的?跟踪SSIS包中的数据加载性能问题

我有一个包加载并做处理各个位上〜100K记录在我的笔记本电脑数据库,约5分钟

尝试相同的封装和相同的数据在测试服务器上,这是一个合理的它仍然在运行......大约1小时到目前为止:-( 使用一小组数据检查包,并且它运行通过Ok

+0

当您将软件包指向您的服务器时......您是否仍在使用BI Studio中的笔记本电脑运行软件包? – 2009-07-07 15:31:51

+0

我的本地设置是两个VMWare Workstation虚拟机,一个是SQL Server,另一个是带有SSIS包的Visual Studio机器。测试环境又是两个虚拟环境,一个是SQL,一个是打包的,但托管在我们的ESX集群上。 – SteveC 2009-07-08 09:15:22

+0

它只是变得更莫名其妙... - 将包放在SQL服务器框中,试着用一些记录运行它,加载正常,加载到几百,仍然可以,然后两千...停下来在数据流任务上。 任务是将视图中的数据推送到几个表中,一个非常直,另一个表中有一个查找和一些额外的列 但是在我的笔记本电脑上,具有更大数据文件的测试文件在5分钟内运行! – SteveC 2009-07-08 12:26:31

回答

0

CozyRoc了在MSDN forums我指出了正确的方向...
- 使用SSMS /管理/活动监控和发现大量交易的条目
- 它让我想起,在OLE DB连接器和unchecked上阅读起来表锁
- WHAM ...数据加载罚款:-)

仍不明白为什么它可以在我的笔记本电脑d/b上正常工作,并在测试服务器上停止?
- 我是唯一一个使用d/b测试的人,所以它不是好像应该有任何争用的表?

0

根据我的经验,最大的性能因素SSIS是Network Latency。在服务器本地运行的程序包比网络上的任何其他程序运行速度都快得多,除此之外,我不能为什么速度会有很大的不同。运行SQL Profiler几分钟可能会产生一些线索。

1

如果您排除了网络延迟,最可能的罪魁祸首(具有实际数量的数据)就是您的管道组织。具体来说,你正在沿着这条管线做什么转变。

数据转换进来四种口味:

  • 流(完全在过程/内存)
  • 无阻塞(但仍使用I/O,例如查找,OLEDB命令)
  • 半阻塞(块管道部分,但不完全,例如合并联接)
  • 阻断(块的流水线,直到它完全接收,例如排序,聚合)

如果您有一些阻止转换,这将显着地混淆在大型数据集上的性能。即使是半阻塞,在不平衡的输入端,也会长时间阻塞。

3

我有类似的问题,在过去的几周里,这里有几件事情,你可以考虑,在根据什么做出我们最大的不同重要性递减的顺序排列:

  1. 唐't 假设关于服务器的任何事情。 我们发现我们的生产服务器的RAID配置错误(惠普向我们销售了具有固件不匹配的磁盘),磁盘写入速度实际上是它应该达到的50倍。因此,请使用Perfmon检查服务器指标。

  2. 检查是否有足够的RAM分配给SQL Server。插入大型数据集通常需要使用RAM和TempDB来构建索引等。确保SQL具有足够的RAM,以便它不需要换出到Pagefile.sys。

  3. 根据SSIS的圣杯,避免使用T-SQL语句操作大型数据集。即使您使用简单恢复模式,所有T-SQL语句也会导致更改的数据写入事务日志。简单恢复模式和完全恢复模式之间的唯一区别在于,每次事务处理后,Simple都会自动截断日志文件之后的。这意味着当使用T-SQL进行操作时,大数据集会冲击日志文件,从而导致性能下降。

  4. 对于大型数据集,如果可能的话,会在源处进行数据排序。 SSIS排序组件扼杀了相当大的数据集,唯一可行的替代方案(Ordinal公司的nSort)每个CPU许可证不可转让的成本为900美元。所以......如果你绝对需要一个大型的数据集,那么考虑把它作为中间步骤加载到临时数据库中。

  5. ,如果你知道你的包是要在目标服务器上运行,因为因为它共享内存与SQL Server它提供了大致的性能提升15%,OLE DB使用SQL Server目标

  6. 将数据库连接管理器上的网络包大小增加到32767。这允许大量数据从源服务器移动得更快,并且可以显着提高大数据集上的读取。

  7. 如果使用查找变换,实验高速缓存大小 - 使用用于较小的数据集查找一个高速缓存连接或全部缓存模式之间,并部分/否缓存对于较大数据集。这可以释放急需的RAM。

  8. 如果组合多个大型数据集,使用RAW文件或临时数据库来保存您的转化数据集,然后结合和插入一张表的所有数据在一个单一的数据流操作,并锁定目标表。使用登台表或RAW文件还可以帮助重新引导表锁定争用。

  9. 最后但并非最不重要,实验与DefaultBufferSize和DefaulBufferMaxRows属性。您需要使用Perfmon.exe监视您的软件包的“Buffers Spooled”性能计数器,然后调整缓冲区大小以上,直到看到缓冲区被假脱机(分页到磁盘),然后退出一点。

8点是非常大的数据集尤为重要,因为如果你只能实现最低限度记录容量插入操作:

  • 目标表是空的,
  • 锁定表在加载操作期间。
  • 数据库处于简单/批量日志恢复模式。

这意味着下一代批量加载表总是会被完全记录下来,因此您希望在第一次数据加载时获取尽可能多的数据到表中。最后,如果您可以对目标表进行分区,然后将数据并行加载到每个分区,则加载时间可以达到2.5倍,尽管这通常不是一个可行的选项。