我在我們的一個客戶中遇到了一個奇怪的問題。當客戶端使用ADO.NET SqlDataReader(從位於與SqlServer相同的服務器上的桌面應用程序調用)運行存儲過程時,SqlDataReader需要大量時間才能執行並最終超時。如果我從SSMS執行相同的存儲過程(相同的參數),它幾乎立即運行(涉及的表不是很大)。ADO.NET數據讀取器與直接在SSMS中執行
涉及的表格已編入索引,索引在前一天晚上重建。
如果我運行「ALTER PROCEDURE procname ..」,那麼SqlDatareader也會立即開始運行,但只會持續一段時間(大約1-2周),然後再次掛起。
這個問題只發生在客戶端服務器上(這是Sql 2005),如果我備份他的數據庫,我們的服務器上沒有任何問題。
你能否建議我應該採取什麼措施來防止這種情況?
是否在某個時間間隔重新編譯過程是「正常」的方法來解決這個問題?
謝謝!
您是否嘗試製作個人資料? 僅供測試,請嘗試清理執行DBCC DROPCLEANBUFFERS和DBCC FREEPROCCACHE的高速緩存。 只是讓我知道結果。 –
客戶端只有Sql 20005的快速版本,所以我無法訪問分析器,並且在我的服務器上問題沒有複製。我會嘗試其他建議,看看發生了什麼。謝謝里卡多! – mslliviu
我得到了。所以每次你改變/創建這個程序,它的運行速度都很快,對吧?請在嘗試重新編譯選項時聲明您的過程並進行測試: CREATE/ALTER(name)(參數)WITH RECOMPILE AS ..... 您也可以使用exec語句:EXECUTE procedure_name WITH RECOMPILE –