SSIS - ETL - 执行性能问题

时间:2018-02-02 11:36:33

标签: sql-server performance ssis execution

我们有一个生产SSIS解决方案,我们将其用作ETL流程。它已经生产了一年多,并且运行良好。然而,一夜之间,表演就像一块石头。 ETL移动和处理的数据量没有显着差异。

ETL过程是一系列非常简单的并行执行的独立包。它没有做任何特别复杂的事情。

没有任何内容部署到服务器,并且在最后一次“正常”运行和第一次“错误”运行之间没有进行任何配置更改,但突然间它花了三倍的时间。

我已经挖掘了日志,我想我可以看到发生了什么,但我不知道为什么。我查询了其中一个SSIS包的 catalog.event_messages 视图,发现包中的不同任务之间存在很大的延迟。我已经看了很多其他软件包并重复了相同的模式 - 看起来它影响了所有这些模块。

当我将这些与前一天的条目(最后一次'好'运行)进行比较时,没有延迟。包装从头到尾都是拉链的。

所以看起来问题是在各种包中的任务之间突然引入这些延迟。

这是一个例子。在最后的“好”运行中,这个包采用了<从开始到结束执行1秒,但第二天晚上花了大约2分钟来移动相同数量的数据。

2018-01-14 22:23:33.9631482 +00:00  EXTRACT_XXXXXXXXXX:Information: The package is attempting to configure from the parent variable "ProcessLogID".
2018-01-14 22:23:33.9631482 +00:00  EXTRACT_XXXXXXXXXX:Information: The package is attempting to configure from the parent variable "LoadID".
2018-01-14 22:24:02.7208761 +00:00  EXTRACT_XXXXXXXXXX:Validation has started.
2018-01-14 22:24:02.7208761 +00:00  EXTRACT_XXXXXXXXXX:Validation is complete.
...
...

所以第二行和第三行之间有29秒的差距

对于我们所拥有的相同套餐,我们进一步向下:

...
2018-01-14 22:24:02.8146315 +00:00  Truncate existing data:Start, 22:24:02.
2018-01-14 22:24:30.9061374 +00:00  Truncate existing data:Validation has started.
2018-01-14 22:24:30.9061374 +00:00  Truncate existing data:Validation is complete.
2018-01-14 22:24:46.6667393 +00:00  Truncate existing data:Finished, 22:24:46, Elapsed time: 00:00:43.844.
...
...

因此,启动此任务与验证之间存在28秒的差距。

稍后我们也有:

...
2018-01-14 22:24:57.9902520 +00:00  Data Flow Task:Information: The final commit for the data insertion in "OLE DB Destination" has started.
2018-01-14 22:25:11.9929728 +00:00  Data Flow Task:Information: The final commit for the data insertion  in "OLE DB Destination" has ended.
...

那里还有另一个巨大的差距。

前一晚此套餐的参赛作品没有任何延迟(整个过程耗时<1秒)。

有没有人对可能导致这种情况的原因有任何想法?

最后一次“好”和第一次“坏”运行之间没有新的部署/配置更改,所以没有(或者至少没有明显的!)发生了变化。

提前感谢您提供任何帮助。

2 个答案:

答案 0 :(得分:0)

尝试使用以下命令更新数据库的统计信息:

EXEC sp_updatestats;

答案 1 :(得分:0)

看起来您的软件包在验证阶段需要时间。请使用&#34; Delay Validation=True&#34;测试您的包裹为任务和看到结果。