2010-02-04 113 views
0

我遇到了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時,沒有結果返回。

回答

2

這是嗅探

重新啓動SQL服務器最有可能的參數清除計劃緩存。如果重建統計數據或指標的問題也就會迎刃而解「ALTER INDEX」和「sp_updatestats」

我建議使用「參數遮蔽」(不重新編譯!)繞過它

SO由我來回答已經:

+0

我會研究這個。這應該按照每晚的計劃任務完成嗎?在每次查詢之前重建索引並更新統計信息不是一個可行的解決方案。 :) –

+1

是最佳實踐。它仍然會發生,但是這對於參數嗅探來說是一個很好的測試,因爲存儲計劃被統計更新無效 – gbn

+0

只是爲了確保我在這裏理解了所有內容:所以問題可能仍然存在,但是它會在索引之後「自行解決」重建? 我覺得我有一些閱讀要做。 :) –

2

您的統計數據是否最新?緩存查詢計劃不正確的一個常見原因是過時的統計信息。

您是否有定期安排的索引重建工作?

+0

指標 - 可能。 Satatistics - 不知道。我沒有建立數據庫,所以我不得不仔細看看。感謝提示。 –