SSIS - ETL - 执行性能问题
Posted
技术标签:
【中文标题】SSIS - ETL - 执行性能问题【英文标题】:SSIS - ETL - Execution performance issue 【发布时间】:2018-02-02 11:36:32 【问题描述】:我们有一个生产 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.
...
所以这里还有一个很大的差距。
这个包的前一晚的条目没有任何延迟(整个过程花了
有人知道是什么原因造成的吗?
在最后一次“好”和第一次“坏”运行之间没有新的部署/配置更改,因此没有任何变化(或至少没有明显的变化!)。
提前感谢您提供的任何帮助。
【问题讨论】:
在包执行期间外部应用程序是否有可能访问源/目标数据库?你可以运行包并重新创建问题并查找任何锁定/等待吗? 谢谢。有人告诉我,当时不应该在源数据库或目标数据库上运行任何其他东西。 服务器配置是否发生了变化:RAM / CPU 设置?您允许 SQL Server 使用多少可用内存? 【参考方案1】:尝试使用此命令更新数据库的统计信息:
EXEC sp_updatestats;
【讨论】:
【参考方案2】:看起来您的包裹在验证阶段需要一些时间。请使用“Delay Validation=True
”测试您的包的任务并查看结果。
【讨论】:
感谢您的回复。这些包已经将“DelayValidation”设置为 true。行为的改变几乎在一夜之间发生,没有代码部署/配置更改,因此这些设置对于“好”和“坏”运行是相同的。以上是关于SSIS - ETL - 执行性能问题的主要内容,如果未能解决你的问题,请参考以下文章