2009-11-03 113 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還會清除所有緩存的執行計劃。