在这么晚的时候这么做似乎很疯狂,但是...
我正在用Rocket SoftSQL源和UniVerse目标重建一些ETL基础设施。旧的目标平台是Windows Server 2003上的SQL 2000,新平台是Windows Server 2012上的SQL 2012。在这两种情况下,都使用ODBC驱动程序连接到源。在新平台上一切似乎都运行得很好,但包的执行时间要慢得多。例如,一个大约有130万行和28列的表,使用SQL2000/DTS需要大约一个小时,使用SQL2012/SSIS需要超过3.5个小时。两台SQL服务器都是在Xen Server上虚拟化的,2012服务器有更多的RAM和更多的vCPU,这两台机器在磁盘基础架构方面都没有优势。无指标(内存、磁盘IO等)在包执行期间是2012服务器上的红线(或者甚至接近红线)。
我读过几篇描述相同场景的论坛帖子,但似乎没有一个真正适合我的解决方案。由于所有这些帖子都很过时(大多数从DTS到SSIS的转换都发生在SQL 2005年的日子里),我很好奇是否有更新的信息。
这些包是非常简单的表副本,没有转换。我的源连接使用"SELECT column,column,.. FROM source source“,目标连接使用”Table or View - Fast Load“。虽然我不能确定,但速度减慢似乎是在方程式的源端。
感谢您的帮助。
发布于 2013-06-01 08:44:25
要研究的一个选项是降低数据流中的缓冲区大小。默认情况下,它被设置为10k行。如果您有一个速度很慢的数据源,可能需要相当长的时间才能填满数据的“桶”,才能开始将一批信息发送到目的地。虽然这看起来可能有悖常理,但降低这个数字可以提高性能,因为5k、1k或100行数据会更快地填满存储桶。然后,当存储桶2、3等被填充时,数据在数据流中进行混洗,并到达源中。
如果您有一个SQL Server源,您可以通过提示您想要一个快速的N行来优化您的查询,您将与您的SSIS包的行大小对齐。
有关这方面的更多详细信息,请参阅Rob Farley's article。
https://stackoverflow.com/questions/16864195
复制相似问题