我们现在在生产中遇到过几次问题,看起来存储过程得到了一个新的、糟糕的计划并开始造成严重破坏。不幸的是,在我们执行 dbcc freeproccache 之前,我们无法捕获计划前后的计划以查看坏计划的样子,我们也没有设置查询存储。
我的问题是,什么都可以导致 sql server 为存储过程生成新计划?特别是对于一直运行的 sp。我知道的一些是:
- dbcc freeproccache
- 重新启动服务器
- 选项重新编译
我们现在在生产中遇到过几次问题,看起来存储过程得到了一个新的、糟糕的计划并开始造成严重破坏。不幸的是,在我们执行 dbcc freeproccache 之前,我们无法捕获计划前后的计划以查看坏计划的样子,我们也没有设置查询存储。
我的问题是,什么都可以导致 sql server 为存储过程生成新计划?特别是对于一直运行的 sp。我知道的一些是:
对于 SQL 2016,这里列出了为什么会发生“statement_recompile_cause”。
对于支持扩展事件跟踪的任何其他版本,您可以获得相同的列表。
几个好的参考: