sql server表快速加载不是

时间:2009-05-13 21:26:56

标签: sql-server ssis

我继承了一个SSIS包,它将500K行(大约30列)加载到一个临时表中。

它现在已经烹饪了大约120分钟并且没有完成 - 这表明它的运行速度低于每秒70行。我知道每个人的环境都不一样,但我认为这与“典型”相比有几个数量级。

奇怪的是,登台表在INT(标识)列上有一个PK约束 - 现在我认为它可能会妨碍加载性能。登台表上没有其他约束,索引或触发器。

有什么建议吗?

----补充资料------
源是制表符分隔文件,它连接到两个单独的数据流组件,这些组件将一些静态数据(运行日期和批处理ID)添加到流,然后连接到OLE DB目标适配器

使用FastLoad

访问模式是OpenRowset

FastLoadOptions是TABLOCK,CHECK_CONSTRAINTS

最大插入提交大小:0

4 个答案:

答案 0 :(得分:6)

我不确定回答我自己的问题的礼节 - 如果这更适合发表评论,请提前抱歉。

问题是来自文本文件的输入列的数据类型:它们都被声明为“文本流[DT_TEXT]”,当我将其更改为“String [DT_STR]”时,在58秒内加载了200万行,这是现在处于“典型”的范围内 - 我不确定当这些列被声明时,Text文件源正在做什么,但它现在已经落后于我了!

答案 1 :(得分:2)

我认为存在某种问题,我在一个文件中批量插入一个临时表,其中包含2000万条记录,更多列和一个标识字段的时间远远少于此,SSIS应该比SQL更快Server 2000批量插入。

您是否检查过阻止问题?

答案 2 :(得分:0)

如果它在一个大型交易中运行,那可能会解释一些事情。确保不时地提交提交。

您可能还需要检查处理器负载,内存和IO以排除资源问题。

答案 3 :(得分:0)

这很难说。

我有复杂的ETL,我会检查数据流中允许的最大线程数,看看是否有些东西可以并行运行。

但听起来这是一个简单的转移。

有500,000行,批处理是一个选项,但我不认为这几行是必要的。

PK身份应该不是问题。您是否在目标上有任何复杂约束或持久计算列?

这是拉动还是推动慢速网络连接?它是从复杂的SP或视图中拉动还是推动?什么是数据源?