2008-12-04 68 views
2

我認爲這個問題說明了一切。我在存儲過程中有幾個月的流程,從一分鐘到一小時不等。如果我宣佈它們爲WITH RECOMPILE,則每次都會生成一個執行計劃。針對每月SQL Server存儲過程流程的「WITH RECOMPILE」的任何缺點?

如果DBA更改了底層索引或統計信息或視圖,我不希望任何人必須進入,並用ALTER或其他方法強制重新編譯SP。

這是否有任何缺點?

回答

2

在這種情況下,這將是完全無害的,並且可能是一個好主意。

1

據我所知,如果需要自動重新編譯SP。所以你對潛在變化的關注並不重要。

但是,服務器嘗試緩存已編譯的SP計劃。使用WITH RECOMPILE將釋放用於緩存編譯過程的內存(至少在下次清除緩存時)。由於它們只是每月運行一次,這似乎是一個好主意。

此外,您可能想看看這篇文章的其他原因使用該指令:
https://web.archive.org/web/1/http://articles.techrepublic%2ecom%2ecom/5100-10878_11-5662581.html

+0

如果有更新的,更好的索引可以使用,或者如果有新的統計數據會如何自動丟棄舊計劃? – 2008-12-04 23:07:14

+0

不,只有當計劃使用的索引或統計信息被修改時,纔會失效的計劃。有關使計劃失效的更多詳細信息,請參閱聯機叢書中的「重新編譯執行計劃」一節中的主題「執行計劃緩存和重用」(查找索引中的「過程緩存」)。 – 2008-12-04 23:43:59

1

如果每個存儲過程只運行每月一次,這是極不可能的編譯程序仍然會在過程緩存中。無論如何它將有效地重新編譯。

即使您在報告當天運行相同的存儲過程100次,每次只需要0-2秒的時間(取決於存儲過程的複雜性),因此這不是一個巨大的開銷。我很樂意在這些存儲過程中設置WITH RECOMPILE。