Sql-Server

跟踪 SQL Server 中的應用程序超時錯誤

  • March 10, 2020

SQL Server 2008 SP3

如何追踪這些超時錯誤?

在此處輸入圖像描述

這些錯誤顯示在專門用於 IIS 中的錯誤報告的 Intranet 儀表板上。我懷疑 Web 應用程序中的預設超時時間為 30 秒,如果查詢時間超過 30 秒,則會引發異常。由於這些 SQL 伺服器上有許多查詢時間超過 30 秒,因此我不能只根據持續時間在探查器中進行過濾。

為受此儀表板監控的網站提供服務的是兩台 IIS 伺服器,它們從七個 SQL Server 實例中檢索數據。

我可以使用**“使用者錯誤消息事件”“OLEDB 錯誤事件”**來跟踪 SQL Server Profiler 中的這些錯誤嗎?

Aaron Bertrand 的評論讓我走上了正軌

而且我相信您應該能夠過濾持續時間和錯誤<> 0。

使用 tsql_duration 配置文件模板創建了伺服器端跟踪

  1. 添加了使用者錯誤消息事件
  2. 添加了以下過濾器

錯誤 <> 0

錯誤 <> 1

嚴重性 <> 10

這避免了擷取USE DATABASE命令

探查器擷取的錯誤消息是 2 - Abort 並且事件類是 10 RPC:Completed。

您可以利用事件探查器中的注意事件來擷取 T-SQL 語句。當我測試它時,它不一定具體說明注意事件是什麼,所以我猜它遵循事件序列的事實,您可以估計那些有問題的查詢。我沒有機會用程式碼和所有東西對其進行全面測試。

然而,我確實遇到了一個可用於查找超時查詢的擴展事件的確切範例,此範例使用 SQL Server 2008。它來自 Jonathan Kehayias:每天的 XEvent (9 of 31) – Targets Week – pair_matching


超時錯誤是客戶端的,錯誤來自與數據庫連接一起使用的提供者(或客戶端)。SQL Server 不一定會跟踪或提供任何直覺的方法來跟踪這些。

使用跟踪,SQL Server 端的超時基本上是有開始但沒有完成的查詢。我遇到了一個非常好的影片,其中介紹了 Sean McCown使用 Profiler 查找查詢超時的範例。現在這不是確鑿的證據,因為肖恩在影片中指出,還有其他可能導致交易沒有結束的事情。

步驟概要:

  • 在 Profiler 中創建跟踪,擷取儲存過程和 TSQL 的開始和完成事件
  • 將該數據載入到表中
  • 查詢該數據以查找開始事件,然後查找結束事件。

SP:Starting正如(44) 和(43)影片中的範例,SP:Completed一旦您將跟踪數據放入表中:

SELECT *
INTO #TraceStart
FROM MyTraceData
WHERE EventClass = 44

SELECT *
INTO #TraceEnd
FROM MyTraceData
WHERE EventClass = 45

SELECT TextData
FROM #TraceStart
EXCEPT
SELECT TextData
FROM #TraceEnd

我希望使用擴展事件可能更容易做到這一點,但從未嘗試將此方法轉移到擴展事件。我不確定 SQL Server 2008 的擴展事件版本是否像 2012 及更高版本一樣開放了對客戶端級別錯誤的訪問。以上只是一種仍然有效的快速而骯髒的方法。

引用自:https://dba.stackexchange.com/questions/80165