SSIS 与 DTS 性能

2024-04-26

这么晚了才这么做似乎很疯狂,但是……

我正在使用 Rocket Software UniVerse 源和 SQL 目标重建一些 ETL 基础设施。旧的目标平台是 Windows Server 2003 上的 SQL 2000,新平台是 Windows Server 2012 上的 SQL 2012。在这两种情况下,都使用 ODBC 驱动程序连接到源。在新平台上一切似乎都工作正常,但包的执行时间却呈指数级减慢。例如,一个大约有 130 万行和 28 列的表使用 SQL 2000/DTS 大约需要一个小时,使用 SQL 2012/SSIS 需要超过 3.5 小时。两台SQL服务器都在Xen Server上虚拟化,2012年的服务器有更多的RAM和更多的vCPU,两台机器在磁盘基础设施上都不具有优势。在包执行期间,2012 服务器上没有指标(内存、磁盘 IO 等)出现红线(甚至接近红线)。

我读过几篇描述相同场景的论坛帖子,但似乎没有一个真正有适合我的解决方案。由于所有这些帖子都相当过时(大多数从 DTS 到 SSIS 的转换发生在 SQL 2005 年),我很好奇是否有任何更新的信息。

这些包是非常简单的表副本,没有转换。我使用“SELECT 列,列,.. FROM sourcetable”作为源连接,使用“表或视图 - 快速加载”作为目标。尽管我不能确定,但​​减速似乎是在等式的源端。

任何帮助表示赞赏。


研究的一种选择是降低数据流中的缓冲区大小。默认情况下,它设置为 10k 行。如果您的数据源速度较慢,则可能需要相当长的时间才能填满数据“桶”start将一批信息发送到目的地。虽然这似乎有悖常理,但降低该数字可以提高性能,因为 5k、1k 或 100 行数据会更快地填满存储桶。然后,当存储桶 2、3 等被填充时,该数据将通过数据流进行混洗并到达源中。

如果您有 SQL Server 源,则可以通过提示您想要快速的 N 行来优化查询,并将其与 SSIS 包的行大小保持一致。

See 罗布·法利的文章 http://sqlblog.com/blogs/rob_farley/archive/2011/02/17/the-ssis-tuning-tip-that-everyone-misses.aspx了解更多详情。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SSIS 与 DTS 性能 的相关文章

随机推荐