2009-11-03 116 views

回答

48

为了清楚..........

执行sp_recompile将“标记”重新编译该给定的存储过程,其被执行的下一次会发生。

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

要清除整个过程缓存执行

DBCC FREEPROCCACHE 
+0

这就是我正在寻找,清除缓存!谢谢! – Brandon 2009-11-03 22:07:09

+0

DBCC FREEPROCCACHE可以执行一个特定的程序吗? – CodeMilian 2014-09-23 20:42:06

+0

@CodeMilan:是的,您可以从计划/过程缓存中逐出特定的plan_handle(例如给定存储过程的查询计划)。有关示例,请参阅BOL:http://msdn.microsoft.com/en-us/library/ms174283.aspx – 2014-09-25 07:54:14

5

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

+0

+1 AHA!现在事情开始有意义了:-)你最好在破译不明确的用户消息,我必须看到... – 2009-11-03 16:22:55

+1

请注意,这个方法会在每次执行时重新编译给定的存储过程,所以如果你希望只需强制一次性重新编译然后使用系统存储过程sp_recompile。 – 2009-11-03 17:45:03

1

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

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

+7

执行sp_recompile时,一个小而重要的区别是不会重新编译给定的存储过程,而是会在下次执行时将其标记为重新编译。 – 2009-11-03 17:58:59

4

如果你想重置QEP为存储过程,你应该使用sp_recompile

3

这不是从你的问题完全清楚你以后。但除了其他建议之外,DBCC FREEPROCCACHE还会清除所有缓存的执行计划。