跟踪 SQL Server 中的應用程序超時錯誤
SQL Server 2008 SP3
如何追踪這些超時錯誤?
這些錯誤顯示在專門用於 IIS 中的錯誤報告的 Intranet 儀表板上。我懷疑 Web 應用程序中的預設超時時間為 30 秒,如果查詢時間超過 30 秒,則會引發異常。由於這些 SQL 伺服器上有許多查詢時間超過 30 秒,因此我不能只根據持續時間在探查器中進行過濾。
為受此儀表板監控的網站提供服務的是兩台 IIS 伺服器,它們從七個 SQL Server 實例中檢索數據。
我可以使用**“使用者錯誤消息事件”和“OLEDB 錯誤事件”**來跟踪 SQL Server Profiler 中的這些錯誤嗎?
Aaron Bertrand 的評論讓我走上了正軌
而且我相信您應該能夠過濾持續時間和錯誤<> 0。
使用 tsql_duration 配置文件模板創建了伺服器端跟踪
- 添加了使用者錯誤消息事件
- 添加了以下過濾器
錯誤 <> 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 及更高版本一樣開放了對客戶端級別錯誤的訪問。以上只是一種仍然有效的快速而骯髒的方法。