2009-03-05 43 views
7

我有一個網絡服務,一直運行良好,現在幾年沒有修改。突然間,它今天決定它不會運行,並引發SQL超時:SQL Server超時故障排除

System.Data.SqlClient.SqlException:超時過期。操作完成之前超時的時間或服務器沒有響應。

有趣的是,這個Web服務與數據庫位於同一臺服務器上,並且如果我將查詢從SQL跟蹤中拖出並在管理工作室中運行,它將在一秒鐘內返回。但是,從Web服務中調用確切的30秒後,它會超時。我正在使用企業庫連接到數據庫,所以我無法想象隨機開始失敗。

我不太確定什麼能突然讓它停止工作。我回收了它所在的應用程序池,甚至重新啓動了我看到它正在使用的SQL過程。同樣的行爲。任何方式我可以解決這個問題?

更新:米奇它。一旦我在sproc定義中的「AS」關鍵字之前添加了「WITH RECOMPILE」,它就會恢復生機。好樣的!

+0

@Chris:請注意,你不應該加上WITH RECOMPILE,除非它是最後一道溝渠。使用RECOMPILE FOR更有針對性 – 2009-03-05 00:16:57

回答

4

您描述的症狀有99.9%確定是由於緩存不正確的查詢計劃造成的。

請參閱這些問題的答案:

其中包括建議重建索引,確保統計數據是最新的一個起點。

您是否安排並啓用定期索引維護工作?

標準基準是:Slow in the Application, Fast in SSMS?

+0

您,先生,是我的英雄。 – Chris 2009-03-05 00:14:17

1

重建任何相關的索引。

1

更新統計信息,檢查探查器中查詢的設置選項。 SSMS可能使用不同的連接設置選項。