在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

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva2V2aW5zcWxzZXJ2ZXI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast">

默认的system_health在不影响性能的情况下将一些重要事件记录下来,方便我们后期做分析,这是一个很好的功能。避免了之前可能因为没有及时监控而找不到原因的状况。

使用默认system_health分析死锁(Deadlock)的更多相关文章

  1. 通过SQL Server Profiler来监视分析死锁

    在两个或多个SQL Server进程中,每一个进程锁定了其他进程试图锁定的资源,就会出现死锁,例如,进程process1对table1持有1个排它锁(X),同时process1对table2请求1个排 ...

  2. sqlserver 抓取所有执行语句 SQL语句分析 死锁 抓取

    原文:sqlserver 抓取所有执行语句 SQL语句分析 死锁 抓取 在多人开发中最头疼的是人少事多没有时间进行codereview,本来功能都没时间写,哪有时间来开会细细来分析代码.软件能跑就行, ...

  3. Java线程之如何分析死锁及避免死锁

    什么是死锁 java中的死锁是一种编程情况,其中两个或多个线程被永久阻塞,Java死锁情况出现至少两个线程和两个或更多资源. 在这里,我们将写了一个简单的程序,它将导致java死锁场景,然后我们将分析 ...

  4. 菜鸡的Java笔记 - java 线程的同步与死锁 (同步 synchronization,死锁 deadlock)

    线程的同步与死锁 (同步 synchronization,死锁 deadlock)        多线程的操作方法            1.线程同步的产生与解决        2.死锁的问题     ...

  5. 一个 Linux 上分析死锁的简单方法

    简介 死锁 (deallocks): 是指两个或两个以上的进程(线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这 ...

  6. 【转】一个 Linux 上分析死锁的简单方法

    简介 死锁 (deallocks): 是指两个或两个以上的进程(线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这 ...

  7. 第9章 用内核对象进行线程同步(4)_死锁(DeadLock)及其他

    9.7 线程同步对象速查表 对象 何时处于未触发状态 何时处于触发状态 成功等待的副作用 进程 进程仍在运行的时候 进程终止的时(ExitProcess.TerminateProcess) 没有 线程 ...

  8. 又踩.NET Core的坑:在同步方法中调用异步方法Wait时发生死锁(deadlock)

    之前在将 Memcached 客户端 EnyimMemcached 迁移 .NET Core 时被这个“坑”坑的刻骨铭心(详见以下链接),当时以为只是在构造函数中调用异步方法(注:这里的异步方法都是指 ...

  9. ADS的默认连接分析及编译器产生符号解惑

    ADS的默认连接顺序是怎样的呢?例如下边从2440init.s中摘出的编译器符号又该怎样理解呢? BaseOfROM    DCD    |Image##RO##Base| TopOfROM      ...

随机推荐

  1. 《UML精粹》第三章 -类图的基本概念

    第三章 类图:基本概念 类图可用来描写叙述系统中各种对象的类型.也可描绘出对象间各种各样的静态关系.此外.类图中也能够秀出类的性质(property)与操作(operation),以及可应用到对象间连 ...

  2. 怎样在同一台电脑使用不同的账号提交到同一个github仓库

    近期这段时间使用github.有时在公司办公,想要用git提交代码到自己的github仓库,提交是显示的作者是自己在公司的账户.而不是自己的github账户.这就相当于提交到github的代码不是自己 ...

  3. iOS-UIImageView载入网络下载的图片(异步+多线程)

    最原始的载入网络下载的图片方式: //最原始载入网络图片方法,相当堵塞主线程,界面卡顿 -(void)setImageWithURL:(NSString *)imageDownloadUrl{ UII ...

  4. Android 编程下获得应用程序的签名

    说明:应用程序的签名被封装在 packageInfo 中,所以我们要获得应用程序的签名就需要获得 PackageManager 来获得包含有签名信息的 packageInfo,再通过 packageI ...

  5. Spring Boot + Bootstrap + jQuery + Freemarker

    Spring Boot + Bootstrap + jQuery + Freemarker 原文地址:http://qilu.me/post/tech/2018-03-18 最近在写一些Web的东西, ...

  6. 9.自己实现linux中的tree

    运行效果: 代码: #include <stdio.h> #include <unistd.h> #include <string.h> #include < ...

  7. Spring《二》 Bean的生命周期

    Bean初始化 1.bean中实现public void init():方法,config.xml中增加init-method="init" 属性. 2.bean实现接口Initi ...

  8. Python学习网络爬虫--转

    原文地址:https://github.com/lining0806/PythonSpiderNotes Python学习网络爬虫主要分3个大的版块:抓取,分析,存储 另外,比较常用的爬虫框架Scra ...

  9. redis的主从模式

    主从通信过程 Master配置: 1:关闭rdb快照(备份工作交给slave) 2:可以开启aof slave配置: 1: 声明slave-of slaveof 192.168.0.102 2: 配置 ...

  10. struts2学习之基础笔记6

    第十一章 Struts 2的国际化 1 国际化简介 http协议,request_locale值 Locale类àà封装类request_locale值       ResourcesBandleàà ...