【发布时间】:2013-04-24 01:32:44
【问题描述】:
我是 SSIS 新手,有两个问题
-
我想将 1,25,000 行从一个表传输到同一个数据库中的另一个表。但是当我使用
Data Flow Task时,会花费太多时间。我尝试使用ADO NET Destination和OLE DB Destination,但性能无法接受。当我在Execute SQL Task中编写等效查询时,它提供了可接受的性能。为什么会有这么大的性能差异。INSERT INTO table1 select * from table2
根据第一次观察,我改变了我的包裹。它完全由
Execute SQL Tasks组成,带有直接查询或存储过程。如果我可以只使用Execute SQL Task来解决我的问题,那么为什么会像许多文档和文章所指出的那样使用 SSIS。我已经看到它可靠,易于维护且相对较快。
【问题讨论】:
-
您是否尝试过将传输分成块,例如一次 10K 行?对于大型单一操作而言,日志记录可能会带来创伤。
-
在使用数据流任务时,它本身将行数分成10k分区然后插入,这是导致速度变慢的原因吗?
-
你在 oledb 目的地选择了“快速加载”吗?
-
是的,我也使用了快速加载。但是在阅读了 billinkc 发布的答案后,我让它保留在所有执行 SQL 任务中,并通过 SQL 代理运行它。我现在很满意!
-
虽然这是一个旧线程,但我最近遇到了这个问题。我的“查找”任务在两个系统上与其他两个系统相比执行不佳。可能是下面概述的原因之一,但我通过将所有查找重构为使用 JOINS 和 CTE 组合的 SQL 任务来解决它。我将第一次批量运行的 30 多个小时缩短到 6 小时。巨大的胜利。只有在数据流添加列的地方,我才保留这些列。
标签: sql-server ssis etl