0

我有一个数据流任务,它更新表中包含 250k 条记录的记录。正在使用主键进行更新。SSIS 是否需要 3 秒。

  1. 有没有办法提取为记录评估的确切 sql(任何记录,我只想要一个可靠的例子)

当我模拟我合理认为是正确的 sql 并在 SSMS 中运行它时,它需要 0.0 秒(记录正在通过 SSIS 包更新,所以我很确定它正在做我认为它正在做的事情)

  1. 什么可能需要 3 秒。它似乎特定于 SSIS。我的理由是 SSMS 执行得如此之快。它不是数据库。

我在钓鱼,我承认,但谷歌并没有帮助我。有人有什么建议吗?

谢谢

格雷格

4

1 回答 1

3

开箱即用的更新组件 OLE DB 命令组件执行逐行 (RBAR) 更新。这通常不会提供良好的性能。更好的更新模式是将更改暂存到“正常”目标(OLE DB 目标或 ADO .NET 目标)。数据流任务完成后,使用执行 SQL 任务对这些行执行基于集合的更新。阅读Stairway to Integration Services系列,尤其是第 4 级以了解此模式。

除了我上面提到的更新问题之外,SSIS 更新与 SSMS 更新之间的区别在于 SSMS 只是要运行一个脚本并退出。SSIS 不只是“去”。它有一个相当复杂的处理模型,因此它需要验证包处于正确的状态、资源是否可用等。如果您正在记录事件(并且应该记录),请为您的任务捕获 OnPreExecute 和 OnPostExecute。这将显示 SSIS 在包中的特定步骤上花费了多长时间。请注意,出于计时目的,从 Visual Studio (BIDS/SSDT) 中运行包将比命令行版本慢,因为它必须启动并管理调试资源(并显示漂亮的框更改颜色/接收复选标记)。

还想知道发生了什么吗?打开 SQL Profiler,您可以从 SSIS 包中捕获所有 SQL Server 活动。如果您长时间捕获生产服务器上的所有内容,请注意这可能产生的影响。如果您使用自己喜欢的搜索引擎,有大量可用资源解释如何运行分析器。

于 2012-11-19T22:31:09.610 回答