4

在这么晚的时候这样做似乎很疯狂,但是......

我正在使用 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 column, column,.. FROM sourcetable”,为我的目的地使用“表或视图 - 快速加载”。减速似乎是等式的源头,尽管我不能确定。

任何帮助表示赞赏。

4

1 回答 1

4

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

如果你有一个 SQL Server 源,你可以通过暗示你想要一个快速的 N 行来优化你的查询,这与你的 SSIS 包的行大小保持一致。

有关详细信息,请参阅Rob Farley 的文章。

于 2013-06-01T00:44:25.147 回答