在这个较晚的日期看起来很疯狂,但是......
我正在使用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”,为我的目标使用“表或视图 - 快速加载”。虽然我无法确定,但放慢速度的趋势仍属于等式的来源。
任何帮助表示感谢。
答案 0 :(得分:4)
调查的一个选项是降低数据流中的缓冲区大小。默认情况下,它设置为10k行。如果您的数据源速度较慢,则只需要启动将一批信息发送到目的地,就可能需要很长时间才能填满“桶”数据。虽然这看似违反直觉,但降低该数量可以提高性能,因为5k或1k或100行数据可以更快地填满桶。然后,这些数据在数据流中被洗牌,并在数据桶2,3,等等被填充时落在源中。
如果您有SQL Server源代码,则可以通过暗示您想要快速N行来优化查询,这些行与SSIS包的行大小一致。
有关详细信息,请参阅Rob Farley's article。