2015-07-21 22 views
0

我在我們的一個客戶中遇到了一個奇怪的問題。當客戶端使用ADO.NET SqlDataReader(從位於與SqlServer相同的服務器上的桌面應用程序調用)運行存儲過程時,SqlDataReader需要大量時間才能執行並最終超時。如果我從SSMS執行相同的存儲過程(相同的參數),它幾乎立即運行(涉及的表不是很大)。ADO.NET數據讀取器與直接在SSMS中執行

涉及的表格已編入索引,索引在前一天晚上重建。

如果我運行「ALTER PROCEDURE procname ..」,那麼SqlDatareader也會立即開始運行,但只會持續一段時間(大約1-2周),然後再次掛起。

這個問題只發生在客戶端服務器上(這是Sql 2005),如果我備份他的數據庫,我們的服務器上沒有任何問題。

你能否建議我應該採取什麼措施來防止這種情況?

是否在某個時間間隔重新編譯過程是「正常」的方法來解決這個問題?

謝謝!

+0

您是否嘗試製作個人資料? 僅供測試,請嘗試清理執行DBCC DROPCLEANBUFFERS和DBCC FREEPROCCACHE的高速緩存。 只是讓我知道結果。 –

+0

客戶端只有Sql 20005的快速版本,所以我無法訪問分析器,並且在我的服務器上問題沒有複製。我會嘗試其他建議,看看發生了什麼。謝謝里卡多! – mslliviu

+0

我得到了。所以每次你改變/創建這個程序,它的運行速度都很快,對吧?請在嘗試重新編譯選項時聲明您的過程並進行測試: CREATE/ALTER(name)(參數)WITH RECOMPILE AS ..... 您也可以使用exec語句:EXECUTE procedure_name WITH RECOMPILE –

回答

0

每次你改變/創建程序,它的工作很快,對嗎?

聲明你的程序時,您可以使用重新編譯選項,並做了一個試驗:

CREATE/ALTER (name) (parameters) WITH RECOMPILE AS

您還可以使用EXEC語句中使用:

EXECUTE procedure_name WITH RECOMPILE

希望它可以幫助

+0

它似乎有竅門... – mslliviu