因此,我使用一個10年曆史的系統上的.net 3.5 Web前端的大型數據庫(30 gig)sql 2005。它有新舊比特運行存儲過程的隨機超時重新創建修復程序
我們正在越來越頻繁地發生問題。
一個存儲過程(到目前爲止我們有4個不同的過程)決定它會超時。該呼叫發生在網絡服務器上,並觸發30秒超時並記錄到我們的錯誤日誌中。該網站使用單一登錄(我知道這是錯誤的,但由於遺留代碼無法更改)。
就在此之後,我運行完全相同的調用,它需要(以我身份登錄)1秒。
問題仍然存在於這個存儲過程中,直到我們刪除並重新創建它,獲取超時負載。每個sp呼叫具有不同的參數。 因爲在得到所有與當前用戶有關的未簽名關閉轉移時,所以當前用戶作爲參數傳入
該解決方案有效,但我不太明白爲什麼。
我們的發佈週期是兩個星期,而且這個錯誤在任何時候都會發生。它在發佈後一週發佈後的第二天發佈,最後一天是發佈後的第12天。
爲每個發佈的版本添加一個SQL多重腳本,每個腳本都存放procs/triggers/functions/views,每個腳本都會刪除並重新創建。
我能想到的是,存儲的proc執行計劃已經損壞/出錯了,並且刪除重新創建它會清除它。
我想調用sps WITH RECOMPILE選項,這是否是否定的?或者一個可接受的方式
「我看不出如何丟棄/重新創建會對此產生任何影響」。如果性能問題是鎖定/事務邏輯,它將不會產生任何影響,但如果問題與執行計劃相關,則會產生巨大影響。重新創建SP(ALTER或DROP/CREATE)將刷新當前的執行計劃,強制在下一次調用時生成新的執行計劃。這可以產生巨大的差異。 –