使用默認system_health分析死鎖(Deadlock)

2008之前我們分析死鎖需要用profiler trace或者trace flag 1222,1204.2008中引入了一個新功能:Extended Events(擴展事件),可以監控Deadlock事件,並且性能更好。 

 

而且2008自帶了一個默認擴展事件會話system_health,如果你運行在2008或者之上版本可以執行下面查詢: 

 

 select * from sys.dm_xe_sessions

 

其中system_health會收集很多重要的信息,之後出現問題可以用來分析。system_health會話收集信息參考http://msdn.microsoft.com/en-us/library/ff877955.aspx。其中一項內容是:Any deadlocks that are detected.

 wKioL1PjHG6Q1qPEAACKasqBn60107.jpg

 

也就是SQL Server會自動收集deadlock的信息,並記錄在ring_buffer。通過分析ring_buffer我們不需要使用profiler 或者Trace Flag就可以找到deadlock原因。

 

使用下面的代碼查看deadlock_report的內容:

 

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_targetsAS xt
                     INNERJOIN sys.dm_xe_sessions AS xs
                     ONxs.address = xt.event_session_address
             WHERE    xs.name = N'system_health'
                     ANDxt.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

 

默認的system_health在不影響性能的情況下將一些重要事件記錄下來,方便我們後期做分析,這是一個非常好的功能。避免了之前可能由於沒有及時監控而找不到原因的狀況。

 

wKiom1PjG1SCRa7pAAHP0eEHWjk097.jpg

 

wKiom1PjG1XjhYX-AAPmb8Sm6Ns936.jpg

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章