性能问题 - max_elapsed_time

Performance issue - max_elapsed_time

我在生产中有一个 sp 运行 max_elapsed_time = 87269.399 和 avg_elapsed_time (ms) = 10.24。 还有 max_logical_reads : 8180303 avg_logical_read = 3803.83795958974

任何人都可以帮助理解为什么我们在最大时间和平均时间上有这么多时间差异。可能是什么原因。

在没有更多信息的情况下,我的 coin-flip 答案(例如,我猜正确的可能性为 50%)是参数嗅探。

这里是 Brent Ozar 关于识别和修复方法的 excellent hour-long video


编辑:当然,还有无数其他的可能性。

  • 您在存储过程中有不同的代码分支(例如,在某些情况下,运行 这些额外的昂贵查询)。
  • 糟糕的统计数据(不是 up-to-date)也可能会增加其他问题的影响。
  • 溢出到磁盘(例如,当结果比内存授予大得多时)也会大大降低速度。
  • 循环在 运行 的 size/number 中变化很大
  • 其他长查询and/or 维护任务阻止 SP 继续
  • SQL 服务器以您意想不到的方式在存储过程中使用视图(例如,当将视图连接到其他 table 时,SQL 服务器可能会执行整个过程每行查看一次,而不是作为单个虚拟 table).

另一方面,大多数人在查看存储过程时将能够找到并修复(或至少理解)上述许多问题。但是,如果您没有听说过参数嗅探,那么您不太可能自己发现它。