2013-12-18 133 views
0

我在SQL Server 2008 R2中有一個存儲過程,它根據傳入的一些參數值來查詢非常大的單個表&。我無法控制模式。存儲過程計劃優化

大多數情況下,存儲過程執行得非常好,但偶爾它似乎會編譯一個真正不好的執行計劃(我的猜測是一個表掃描 - 這將是這張表的堅果)。

什麼是優化存儲過程以避免這種情況的最佳方法?我目前正試圖OPTIMIZE FOR &使用一些合理的參數值

不過,我想我可能是USE PLAN &更好正義的力量,我知道作品以及執行計劃(沒有JOIN S,只是3項指標上表格和表格大小非常一致(BIG!),所以我認爲這個計劃不應該真的需要改變)。

任何人都有過這種事情的經驗?什麼效果最好?

+0

我通常首先檢查參數嗅探。我花了幾個小時重構查詢,只是發現使用局部變量而不是參數變量可能已經修復了它。我不知道它是否會幫助你,所以這不是一個答案,但這是一個體面的鏈接:http://blogs.technet.com/b/mdegre/archive/2012/03/19/what-is- parameter-sniffing.aspx – Malk

+0

你有沒有試過在SSMS中查看執行計劃?它可能會給你一個視覺上哪個表導致性能受到影響。 –

+0

您是否檢查過以確保您的統計信息是最新的?這可能是一個問題,如果有很多的UPDATE/INSERT/DELETE活動 – JohnFx

回答

1

Grant Fritchey是我們當地PASS章節的朋友。

任何人,你確定你沒有參數嗅探繼續嗎?

它通常發生在傾斜數據。

如果是這樣,有七種不同的方式來對付它。看看格蘭特的幻燈片。

http://www.scarydba.com/wp-content/uploads/2011/01/LuckyConnections.pdf

但關鍵是要找到/看無論是在圖形格式好的和壞的計劃。

爲什麼比下一個更好。一旦你知道發生了什麼,選擇一種方法來解決它。

好運

Ĵ

+0

很酷 - 感謝pdf,需要研究一些有趣的部分。 – SinisterPenguin

0

我想我破解了 - 問題似乎是導致不從基礎表中的記錄參數。

我添加了一個日期謂詞 - 即使查詢並不真的需要一個,因爲它使用整數升序鍵來返回X最近的記錄。

當參數值沒有匹配記錄時,這大大減少了搜索記錄的數量。

希望這是有道理的!

感謝您的評論 - 它非常瞭解這些事情的更多細節。