如何解决性能问题-max_elapsed_time
我正在生产中运行一个sp,其max_elapsed_time = 87269.399和avg_elapsed_time(ms)= 10.24。 另外max_logical_reads:8180303 avg_logical_read = 3803.83795958974
任何人都可以帮助您理解为什么我们在最大时间和平均时间上有如此大的差异。可能是什么原因。
解决方法
没有更多信息,我的掷硬币式答案(例如,我猜测有50%的正确几率)是参数嗅探。
这是布伦特·奥扎尔(Brent Ozar)撰写的excellent hour-long video,内容涉及解决方法和识别方法。
编辑:当然,还有许多其他可能性。
- 您在存储过程中有不同的代码分支(例如,在某些情况下,运行这些额外的昂贵查询)。
- 不良的统计信息(不是最新的)可能还会增加其他问题的影响。
- 溢出到磁盘上(例如,当结果远大于内存授予时)也会大大减慢速度。
- 循环的大小/运行次数可能会有很大的差异
- 其他长查询和/或维护任务阻止SP继续
- SQL Server以您不希望的方式在存储过程中使用VIEW(例如,将视图联接到其他表时,SQL Server可能对每一行执行一次整个视图,而不是将其作为单个虚拟表执行)。 / li>
另一方面,大多数人在查看存储过程时将能够找到并修复(或至少理解)很多上述内容。但是,如果您还没有听说过参数嗅探,那么您不太可能自己发现它。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。