Mis*_*sky 5 sql-server stored-procedures t-sql
我知道重新编译是什么意思,我知道由于性能问题,没有 dmv 等,大多数时候不建议使用它。
有时在某些情况下它可能有所帮助,但OPTION(RECOMPILE)
也可能有所帮助。
那么,什么时候最好使用With Recompile
over OPTION(RECOMPILE)
?
谢谢。
我不认为它永远是(除非你被困在 SQL Server 2000 中并且正在寻找怜悯——别担心,你会得到的)。我OPTION (RECOMPILE)
每次都会选择语句级别。我将引用 Paul White 的博客文章Parameter Sniffing、Embedding 和 RECOMPILE Options 中的相关部分:
当遇到参数敏感性问题时,论坛和问答网站上的一条常见建议是“使用重新编译”(假设前面介绍的其他调整选项不合适)。不幸的是,该建议经常被误解为向存储过程添加 WITH RECOMPILE 选项。
使用 WITH RECOMPILE 有效地将我们返回到 SQL Server 2000 行为,其中在每次执行时重新编译整个存储过程。在 SQL Server 2005 及更高版本上,更好的替代方法是仅对存在参数嗅探问题的语句使用 OPTION (RECOMPILE) 查询提示。此查询提示只会重新编译有问题的语句;存储过程中其他语句的执行计划被缓存并正常重用。
使用 WITH RECOMPILE 还意味着不缓存存储过程的已编译计划。因此,在 sys.dm_exec_query_stats 等 DMV 中不会维护任何性能信息。改为使用查询提示意味着可以缓存已编译的计划,并且 DMV 中提供性能信息(尽管它仅限于最近的执行,仅适用于受影响的语句)。
对于至少运行 SQL Server 2008 build 2746(Service Pack 1 with Cumulative Update 5)的实例,使用 OPTION (RECOMPILE) 比 WITH RECOMPILE 有另一个显着优势:只有 OPTION (RECOMPILE) 启用参数嵌入优化。
您可以继续阅读帖子以了解此优化,或阅读整篇文章以了解有关参数嗅探以及更改 SQL Server 行为的不同方式的更多信息。
归档时间: |
|
查看次数: |
2443 次 |
最近记录: |