1
有沒有一種很好的方式來報告C#中的Microsoft SQL服務器死鎖信息? 我有一個正在運行查詢,更新等的C#程序...偶爾它會得到一個死鎖錯誤,但錯誤消息在診斷問題時沒有特別的幫助: 事務(進程ID 347)鎖定資源與另一個進程並被選爲死鎖受害者。重新運行交易。C#死鎖信息
現在我必須跟蹤一個DBA去搜索SQL日誌來獲取死鎖圖。我想知道是否有辦法以編程方式獲取這些信息?
有沒有一種很好的方式來報告C#中的Microsoft SQL服務器死鎖信息? 我有一個正在運行查詢,更新等的C#程序...偶爾它會得到一個死鎖錯誤,但錯誤消息在診斷問題時沒有特別的幫助: 事務(進程ID 347)鎖定資源與另一個進程並被選爲死鎖受害者。重新運行交易。C#死鎖信息
現在我必須跟蹤一個DBA去搜索SQL日誌來獲取死鎖圖。我想知道是否有辦法以編程方式獲取這些信息?
死鎖的細節不會返回給客戶端。在更高版本的SQL Server中,以編程方式獲取死鎖詳細信息的方法是查詢system_health擴展事件會話,如下面的示例查詢,您可以根據具體情況調整該查詢。請注意,此方法需要VIEW SERVER STATE
權限。
--get deadlock_report from ring_buffer target
SELECT
xed.value('@timestamp', 'datetime') as Creation_Date,
xed.query('.') AS Extend_Event
FROM
(
SELECT CAST([target_data] AS XML) AS Target_Data
FROM sys.dm_xe_session_targets AS xt
INNER JOIN sys.dm_xe_sessions AS xs
ON xs.address = xt.event_session_address
WHERE xs.name = N'system_health'
AND xt.target_name = N'ring_buffer'
) AS XML_Data
CROSS APPLY Target_Data.nodes('RingBufferTarget/event[@name="xml_deadlock_report"]') AS XEventData(xed)
ORDER BY Creation_Date DESC;
GO
你可以嘗試這樣的事情http://stackoverflow.com/questions/13159326/implementing-retry-logic-for-deadlock-exceptions – NinjaDeveloper
看它是否有助於你:http://stackoverflow.com /問題/ 320636 /如何對獲得高效-SQL服務器死鎖處理 - 在-C鋒利與-ADO – Aby