首页 > 解决方案 > 性能问题 - max_elapsed_time

问题描述

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

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

标签: sql-servertsqldatabase-performancedatabase-administrationdatabase-tuning

解决方案


如果没有更多信息,我的掷硬币答案(例如,我猜有 50% 的机会是正确的)是参数嗅探。

这是 Brent Ozar 关于识别和修复方法的精彩视频


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

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

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


推荐阅读