使用默认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的内容:

 

1
2
3
4
5
6
7
8
9
10
11
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



本文转自 lzf328 51CTO博客,原文链接:


http://blog.51cto.com/lzf328/1536869

相关文章
错误: 实例 "ahwater-linux-core" 执行所请求操作失败,实例处于错误状态。: 请稍后再试 [错误: Exceeded maximum number of retries. Exceeded max scheduling attempts 3 for instance 7c1609
错误: 实例 "ahwater-linux-core" 执行所请求操作失败,实例处于错误状态。: 请稍后再试 [错误: Exceeded maximum number of retries. Exceeded max scheduling attempts 3 for instance 7c1609c9-9d0f-4836-85b3-cefd45f942a7.
5419 0
|
11月前
|
SQL 关系型数据库 MySQL
MySQL因为hung住,自动重新启动,InnoDB: Semaphore wait has lasted > 600 seconds
从错误日志中检查,有两个信号量等待时间超长,MySQL自动crash了
250 0
|
10月前
|
SQL 关系型数据库 MySQL
Mysql 异常:Lock wait timeout exceeded; try restarting transaction的解决办法
Mysql 异常:Lock wait timeout exceeded; try restarting transaction的解决办法
105 0
|
Oracle 关系型数据库 Linux
oom_kill_process造成数据库挂起并出现found dead shared server
这篇博客是上一篇博客Oracle shutdown immediate遭遇ORA-24324 ORA-24323 ORA-01089的延伸(数据库挂起hang时,才去重启的),其实这是我们海外一工厂的遇到的案例,把内容拆开是因为这个case分开讲述显得主题明确一些。
1274 0
|
SQL 数据库 Windows
SQL Server会话KILL不掉,一直处于KILLED /ROLLBACK状态情形浅析
原文:SQL Server会话KILL不掉,一直处于KILLED /ROLLBACK状态情形浅析 今天遇到一个很奇怪的情况,发现一个会话异常,这个会话只是在执行一个简单的存储过程,里面使用了链接服务器(Linked Server)查询另外一台服务器数据(存储过程里面没有任何显性事务、UPDATE、D...
1958 0
|
关系型数据库 Java 数据库
APPARENT DEADLOCK!!! - C3P0连接池DeadLock机制分析
1 问题 近期,刚上线不久的生产系统的数据库连接池 C3P0 (版本为0.9.5.2)突然报出 APPARENT DEADLOCK!!! 错误。 1.1 错误日志 错误日志如下。
5096 0