我们有一个生产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秒)。
有没有人对可能导致这种情况的原因有任何想法?
最后一次“好”和第一次“坏”运行之间没有新的部署/配置更改,所以没有(或者至少没有明显的!)发生了变化。
提前感谢您提供任何帮助。
答案 0 :(得分:0)
尝试使用以下命令更新数据库的统计信息:
EXEC sp_updatestats;
答案 1 :(得分:0)
看起来您的软件包在验证阶段需要时间。请使用&#34; Delay Validation=True
&#34;测试您的包裹为任务和看到结果。