我们使用的是 SQL Server 2016 并关闭了参数嗅探,因为它有时会导致严重的性能问题。我看到一些存储过程在 30 秒内运行,当它们重新编译时,它们在 2 秒内运行。这似乎与我们在参数嗅探中看到的行为非常相似。任何想法为什么这仍然发生?
账单
根据此链接,在 2016 年关闭参数嗅探选项等效于设置跟踪标志 4136。您应该阅读该跟踪标志。
来自该跟踪标志链接的特别重要的信息:
启用跟踪标志 4136...相当于添加一个 OPTIMIZE FOR UNKNOWN 提示
和
即使设置了跟踪标志,满足以下任何条件的查询仍会进行参数嗅探。
- 该参数是通过使用“优化 (@p = )”查询提示来指定的。
- 查询使用“选项(重新编译)”查询提示。
- 该查询是使用“with recompile”选项的存储过程的一部分。
因此,通过添加重新编译,您告诉优化器根据传递的任何参数构建计划,但不要重用该计划。通过关闭参数嗅探(并且没有重新编译),计划是基于参数的统计信息构建的,并且将被重用,即使是对于否则会生成不同(可能更好)计划的值。
| 归档时间: |
|
| 查看次数: |
1335 次 |
| 最近记录: |