首页 > 代码库 > 使用默认system_health分析死锁(Deadlock)
使用默认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.
也就是SQL Server会自动收集deadlock的信息,并记录在ring_buffer。通过分析ring_buffer就可以找到死锁原因,这样就不需要使用profiler或者Trace Flag收集信息。
使用下面的代码查看deadlock_report的内容:
SELECT xed.value('@timestamp','datetime')as Creation_Date, xed.query('.')AS Extend_Event FROM ( SELECT CAST([target_data]ASXML)AS Target_Data FROM sys.dm_xe_session_targetsAS xt INNER JOIN sys.dm_xe_sessionsAS 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_DateDESC
默认的system_health在不影响性能的情况下将一些重要事件记录下来,方便我们后期做分析,这是一个非常好的功能。避免了之前可能由于没有及时监控而找不到原因的状况。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。