我遇到了SQL Server 2005的問題,其中存儲過程似乎隨機掛起/鎖定,並且從不返回任何結果。SPROC掛在SQL Server 2005中
存儲過程所做的是調用一個函數,該函數又使兩個不同函數的聯合 - 返回相同類型的數據,但是來自不同的條件。沒有進展。我不認爲這是掛起的功能,因爲還有其他SPROC可以在沒有問題的情況下調用相同的功能,即使第一個鎖定了也是如此。
在SPROC掛起後,任何進一步嘗試調用它都會導致超時 - 而不是調用本身,但響應時間太長,因爲沒有返回結果,代碼將引發異常。
在相對低負荷的系統中,在兩個月內至少發生過三次。重新啓動SQL Server解決了這種情況,但我並不認爲這是解決問題的方法。
我查找了信息,並發現有關查詢緩存將會損壞。然而,這是關於動態SQL字符串,我的問題不是。我想它可能仍然是查詢緩存。
有沒有人有同樣的問題,如果是這樣,你做了什麼(不要說「每天早上重新啓動SQL Server」))?有沒有什麼方法可以調試這個問題,試圖準確地找到出錯的地方?我不能重現這個問題,但當它再次出現時,如果我知道在哪裏仔細觀察,這將是一件好事。
我不認爲它有什麼區別,但只是爲了記錄,SPROC從.NET 3.5代碼調用,使用Entity Franework。我說它沒有什麼區別,因爲當我測試過直接從SQL Server Management Studio執行SPROC時,沒有結果返回。
我會研究這個。這應該按照每晚的計劃任務完成嗎?在每次查詢之前重建索引並更新統計信息不是一個可行的解決方案。 :) –
是最佳實踐。它仍然會發生,但是這對於參數嗅探來說是一個很好的測試,因爲存儲計劃被統計更新無效 – gbn
只是爲了確保我在這裏理解了所有內容:所以問題可能仍然存在,但是它會在索引之後「自行解決」重建? 我覺得我有一些閱讀要做。 :) –