2011-11-01 102 views
0

我們有一個每小時更新一次的數據庫。對於更新或插入的每一行使用DELETE/INSERT的應用程序進行更改。 SQL Server是2008 R2標準版。用於填充計劃緩存的即席查詢的SQL Server執行計劃

即席查詢的查詢執行計劃正在推出其他(更重要,更大的)執行計劃,這些計劃正在影響對該數據庫的報告並進入數據緩存。

查看計劃緩存後,我們發現(如預期的那樣)SQL正在爲每個查詢生成一個新計劃。

我的問題是,會創建一個計劃指南停止SQL爲每個更新生成一個新的計劃?

我在緩存中看到,例如,對於float列的更新,SQL將其參數化爲每次變化長度的數字,這意味着每個參數化查詢都是不同的。如果我使用查詢的參數化版本創建計劃指南,爲每個列指定正確的數據類型,這是否會強制SQL使用此計劃?

我知道使用存儲過程將解決這個問題,但是由於其他原因,這不是一個選項。

謝謝。

回答

0

您是否嘗試啓用'針對特定工作負載進行優化'

特設工作負載選項的優化來提高包含許多單個 利用特設批工作負載 效率計劃緩存的。當此選項設置爲1時,數據庫引擎 在第一次編譯批次爲 而不是完整編譯計劃時,會在計劃高速緩存中存儲一​​個小的編譯計劃存根。這個 有助於緩解內存壓力,因爲不允許計劃緩存到充滿編譯計劃,不被重用。

將ad hoc工作負載的優化設置爲1隻影響新計劃; 已經在計劃緩存中的計劃不受影響。

Ref

Plan cache and optimizing for adhoc workloads

要啓用此功能,使用這些命令(我會在測試系統上進行測試在前):

SP_CONFIGURE 'show advanced options',1 
RECONFIGURE 
GO 

SP_CONFIGURE 'optimize for ad hoc workloads',1 
RECONFIGURE 
GO 
+0

謝謝,但我忘了說,我已啓用此。不幸的是我們還沒有看到任何真正的改善 – Chris

+0

你能清除proc緩存嗎? (是的,提到你打開這個事實是一個遺漏......) –

+0

3444答案,2個問題。 – dikidera