Dot-Net

如何解決間歇性 SQL 超時錯誤

  • October 12, 2011

我們每天都會遇到一些實例,其中我們從多個應用程序中收到大量 SQL 超時錯誤(System.Data.SqlClient.SqlException:超時已過期。在操作完成之前超時時間已過或伺服器沒有響應.) 我們的網路上有 100 多個不同的應用程序,包括 Web 和桌面應用程序。從 VB6 和 Classic ASP 到 .NET 4 的所有內容。我可以找到各種顯示副作用的數據,但無法查明導致這種情況的原因。我們的 DBA 說 SQL 伺服器沒有問題,而 IT 部門說 Web 伺服器或網路沒有問題,所以我當然要在中間嘗試解決這個問題。

我真的只是在尋找關於我可以做哪些其他故障排除的建議來嘗試追踪這個問題。

我們在集群中執行 SQL Server 2008 R2。有一些不同的伺服器連接到它,從 Windows server 2003 到不同品種的 2008 不等。

這是我到目前為止所做的:

  • 執行長時間執行的查詢和死鎖的 SQL 跟踪。 這表明問題發生時沒有死鎖,長時間執行的查詢都與我們的超時錯誤相吻合,但看起來是副作用,而不是原因。非常基本的查詢通常會立即返回,有時最終需要 30、60 或 120 秒才能執行。這種情況會持續幾分鐘,然後一切都會恢復並在此之後正常工作。
  • 使用性能監視器跟踪連接池連接。 這有時會在超時時間附近顯示一些連接數峰值,但仍然沒有達到預設的 100 個連接限制的一半。同樣,這裡似乎沒有任何跡象表明原因。
  • 將 Web 應用程序分成不同的應用程序池。 我們試圖縮小我們認為可能是主要問題的應用程序(最健談等)並將它們放在單獨的應用程序池中,但這似乎不會影響任何事情或幫助我們縮小任何事情的範圍。
  • **監視 SQL Server 上的磁碟使用情況。**我們已經對 SQL 伺服器進行了一些監控,並且在發生這些超時時沒有看到任何峰值或任何問題跡象。
  • 已驗證 TempDB不是問題的原因。

如果我想到我們還嘗試過什麼,我會回來添加更多。請讓我知道接下來要解決什麼問題的一些想法。

執行長時間執行的查詢和死鎖的 SQL 跟踪。這表明問題發生時沒有死鎖,長時間執行的查詢都與我們的超時錯誤相吻合,但看起來是副作用,而不是原因。非常基本的查詢通常會立即返回,有時最終需要 30、60 或 120 秒才能執行。這種情況會持續幾分鐘,然後一切都會恢復並在此之後正常工作。

看起來有些查詢/事務會鎖定您的數據庫,直到它們完成。您必須找出哪些查詢正在阻塞並在其他時間重寫/執行它們以避免阻塞其他程序。此時等待的查詢剛剛超時。

需要深入研究的一點是事務日誌和數據庫的自動增量大小。將它們設置為固定大小而不是目前文件的百分比。如果文件越來越高,分配足夠空間所需的時間最終會隨著事務超時而變長。你的數據庫停止了。

引用自:https://stackoverflow.com/questions/7743725