重置SQL Server执行计划

34

我已经找了很多地方,但还是不知道怎么重置SQL Server的执行计划,请问该怎么做?

5个回答

54

为了明确起见..........

执行 sp_recompile 将“标记”给定的存储过程以进行重新编译,这将在下次执行该过程时发生。

使用 WITH RECOMPILE 选项将导致每次执行给定的存储过程都生成一个新的执行计划。

要清除整个过程缓存,请执行

DBCC FREEPROCCACHE

DBCC FREEPROCCACHE可以仅针对特定的存储过程执行吗? - CodeMilian
1
@CodeMilan:是的,您可以从计划/过程缓存中驱逐特定的plan_handle(例如给定存储过程的查询计划)。请参阅BOL示例:http://msdn.microsoft.com/en-us/library/ms174283.aspx - John Sansom

5

对于存储过程,您可以使用 WITH RECOMPILE 选项。


+1 AHA!! 现在事情开始变得有意义了 :-) 你更擅长解密不清晰的用户消息,我必须承认... - marc_s
1
请注意,每次执行此方法时都会重新编译给定的存储过程,因此如果您只想强制进行一次重新编译,则可以使用系统存储过程sp_recompile。 - John Sansom

4

如果您想要重置存储过程的 QEP,您应该使用 sp_recompile


3

从您的问题中并不完全清楚您想要什么。但除了其他建议外,DBCC FREEPROCCACHE 还可以清除所有缓存的执行计划。


1

sp_recompile将丢弃现有的查询计划并重新编译存储过程。 或者您可以重新启动SQL,这将清除整个执行计划缓存。

WITH RECOMPILE将在每次执行时生成一个新的计划。


7
执行sp_recompile并不会重新编译给定的存储过程,而是会在下一次执行该存储过程时标记它以进行重新编译。这是一个细微但重要的区别。 - John Sansom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接