sql-server - 性能问题 - 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 关于识别和修复方法的精彩视频。
编辑:当然,还有无数其他可能性。
- 您在存储过程中有不同的代码分支(例如,在某些情况下,运行这些额外昂贵的查询)。
- 糟糕的统计数据(不是最新的)也可能会增加其他问题的影响。
- 溢出到磁盘(例如,当结果比内存授予大得多时)也会大大减慢速度。
- 大小/运行次数变化很大的循环
- 阻止 SP 继续的其他长查询和/或维护任务
- SQL Server 在存储过程中以您意想不到的方式使用视图(例如,当将视图连接到其他表时,SQL Server 可能对每一行执行一次整个视图,而不是作为单个虚拟表)。
另一方面,大多数人在查看存储过程时将能够找到并修复(或至少理解)上述很多内容。但是,如果您还没有听说过参数嗅探,那么您不太可能自己发现它。
推荐阅读
- angular - 如何将值从对话服务传递到父 Angular 2
- python - Python:如何并行化用于具有许多函数输入的嵌套 for 循环中的函数?
- dependency-injection - 如何在责任链模式中使用 Unity IoC 注入多个不同的依赖项?
- google-analytics - 将自定义视图保存为默认值
- python - 如何在 Python 中使用 GLPK 为目标函数设置时间限制或松弛参数?
- typescript - Typescript 泛型:给定键 K 和对象 T,约束 T[K] 的类型
- excel - 在一列中查找类似日期然后计算最小值/最大值之间的差异的公式
- android - Android:使用 Viewmodel 缓存来自 EditText 的瞬态 UI 数据的最佳方式
- python - DRF 不会向浏览器发送原始 JSON 字符串。它返回一个 JSON 字符串,想要绕过调用 json.load
- c++ - 捕获异常后如何退出程序执行