我想知道你們是否可以幫我弄到我最近在SQL Server上出現的一個奇怪問題的底部。SQL Server程序執行計劃的奇怪問題
我有一個存儲過程(讓我們打電話SPold
),這是一個相當大的計算量很大(不可能在應用程序中做到這一點,因爲大約6000用戶需要返回一個呃這到基於Surname的1000))。存儲過程通常在幾秒鐘內執行,並且每隔幾分鐘調用一次。
現在今天早上,存儲過程突然執行4-10倍,導致一些超時。我發現通過使用新名稱(SPnew
)製作一個過程副本並執行,我會再次獲得快速執行時間。這表明執行計劃與原始版本SPold
有關,因此我決定使用重新編譯來執行它。這樣可以更快地返回結果(雖然速度不及SPnew
),但用戶後續撥打SPold
的速度再次緩慢。這就像新計劃沒有被保留。
我所做的就是修復這個問題,把Exec SPnew
改成SPold
,現在撥打SPold
又回來了。
有沒有人知道這裏發生了什麼?一夜之間更新的唯一數據是統計數據,但我認爲這應該會影響SPold
和SPnew
。
這可能有助於[緩慢的應用程序,快速SSMS? 瞭解性能之謎](http://www.sommarskog.se/query-plan-mysteries.html) – Kashif
好的 - 我將其標記爲完整,儘管Mitch也是正確的,因爲它是參數嗅探。 Treaschf給了我一個解決方案,雖然...我也閱讀上面的鏈接,這是最豐富的。 – Milambardo