SQL Server 2014-我们可以停止 sql 自动重新编译过程吗?

Kri*_*ris 3 sql-server sql-server-2014

有没有办法检查是什么导致存储过程重新编译(索引重建、统计更新和参数嗅探除外 - 无需运行分析器跟踪或扩展事件),我们是否可以停止/取消/终止自动重新编译过程以减少 CPU 负载?

Gra*_*hey 6

您可以使用扩展事件监视语句级别的重新编译事件。我在这里有一篇博客文章,其中详细说明了如何做到这一点。可以看到有重新编译原因的列。这将明确地告诉您为什么要重新编译任何给定的语句。

对于保留在缓存中的计划,您可以使用查询提示KEEPFIXED PLAN防止它在缓存中时重新编译。如果计划在缓存中过期,则在下次运行查询时仍需进行编译。这也不会阻止因结构或代码更改而重新编译。删除索引,更改程序,您仍然会重新编译。这是因为无法再保证计划会起作用,因为它可能引用您删除的索引,或者与您提交的代码不同的列。所以它必须重新编译。但是,对于统计更新,KEEPFIXED PLAN 将阻止自动重新编译。

还有一个 KEEP PLAN 提示,可以减少由于数据更改而重新编译的次数,但不会像 KEEPFIXED PLAN 那样消除它们。

另一种选择是为重新编译占用大量资源的特定计划创建计划指南。尽管对于使用查询存储的计划指南和计划强制,编译过程仍在运行,从而耗尽了这些资源。你最终会得到一个指定的计划。