优化第三方ETL程序的SQL插入

时间:2011-02-08 16:39:54

标签: sql-server sql-server-2008 insert etl

我们目前有一个供应商,它有一个定制的ETL包(它是一个更大的程序的一部分),似乎需要很长时间才能完成。

我们当前的设置是运行SQL Server 2008 R2标准版。涉及两个服务器,SQL Server和另一个称为批处理服务器的服务器。基本上发生的事情是批处理服务器从表中请求SQL Server获取一组行,它将这些行存储在批处理服务器的内存中,并在此处进行多次转换。转换/擦除数据后,需要将其加载回数据库服务器上的几个不同的表中。目前,这是通过包含在SP_PREPARE中的​​一系列插入语句来完成的。然后它继续为每个需要插入的行(数千万次)运行一次sp_execute语句。

自从我使用IBM Datastage以来已经有一段时间了,但我似乎记得它在默认情况下试图进行类似的插入,结果非常慢。

我已经提到让他们使用修改后的数据导出数据文件并允许我们批量导入此文件,但是将数据导出到文件可能会对他们的代码进行重大更改,而且可能不是一个选项。

非常感谢任何建议或想法!

安德鲁

2 个答案:

答案 0 :(得分:0)

Echo JNK上面的评论。在不更改代码的情况下,您可以做很多事情,但您可以做的一件事是在插入之前删除目标上的索引并在之后重建它们。在每一行之后重建索引可能会大大减慢过程。

答案 1 :(得分:0)

如果他们使用的是OLEDB目标控件,则有一些因素会影响插入速度:

  1. 将其设置为快速加载并推送任何 重复(通过错误输出)到 溢出表即可 使用常规表重新插入 加载。正常速度负载至少是 慢了2个数量级 快速加载。
  2. 设置 任务上的DefaultBufferMaxRows 控制更高,批量插入更多 批次中的项目。但是,即使是1 批量重复强制 整批到错误输出。