SQL Server 2008 R2 死锁监控

系统 1610 0

死锁监控一直都很麻烦,我没有找到很好的方法

如果大家有好的方法,我也很想学习一下

我的方法比较简单:

 1.sp_altermessage 1205 修改1205 错误让他能够写入日志 这样 代理中的警告才能使用

 2.当然是启动 代理中的警告。开数据库邮件,会把死锁错误发送到操作员邮箱里面。缺点就是没有详细的死锁信息。

   3.使用sql server 2008 r2 自带的 扩展事件中system_health默认是开启的,里面会抓取比较多的值

  你可以使用   sys.dm_xe_session_events  联合 sys.dm_xe_sessions 查看 抓取了那些值 当然其中一个是死锁信息。

    当产生死锁的时候你何以使用: 

      
        SELECT
      
      
        REPLACE
      
      
        (


      
      
        REPLACE
      
      (XEventData.XEvent.value(
      
        '
      
      
        (data/value)[1]
      
      
        '
      
      , 
      
        '
      
      
        varchar(max)
      
      
        '
      
      
        ), 


      
      
        '
      
      
        <victim-list>
      
      
        '
      
      , 
      
        '
      
      
        <deadlock><victim-list>
      
      
        '
      
      
        ),


      
      
        '
      
      
        <process-list>
      
      
        '
      
      ,
      
        '
      
      
        </victim-list><process-list>
      
      
        '
      
      
        )




      
      
        FROM
      
      
        

(
      
      
        select
      
      
        CAST
      
      (target_data 
      
        as
      
       xml) 
      
        as
      
      
         TargetData


      
      
        from
      
      
         sys.dm_xe_session_targets st


      
      
        join
      
       sys.dm_xe_sessions s 
      
        on
      
       s.address 
      
        =
      
      
         st.event_session_address


      
      
        where
      
       name 
      
        =
      
      
        '
      
      
        system_health
      
      
        '
      
       ) 
      
        AS
      
      
         Data


      
      
        CROSS
      
       APPLY TargetData.nodes (
      
        '
      
      
        //RingBufferTarget/event
      
      
        '
      
      ) 
      
        AS
      
      
         XEventData (XEvent)


      
      
        where
      
       XEventData.XEvent.value(
      
        '
      
      
        @name
      
      
        '
      
      , 
      
        '
      
      
        varchar(4000)
      
      
        '
      
      ) 
      
        =
      
      
        '
      
      
        xml_deadlock_report
      
      
        '
      
    

查询所有的死锁信息,当然如果出现内存瓶颈的时候能保存多久我不确定,如果死锁太多你无法顺利的找到,你想把结果减少一点,可以在每次查询死锁后使用:

      
        ALTER
      
       EVENT SESSION system_health 
      
        ON
      
      
         SERVER

STATE 
      
      
        =
      
      
         stop


      
      
        go
      
      
        ALTER
      
       EVENT SESSION system_health 
      
        ON
      
      
         SERVER

STATE 
      
      
        =
      
       start
    

关闭并打开这个扩展事件的session,那么保存在内存的记录就会被清空。下次的死锁信息就是最新的。

SQL Server 2008 R2 死锁监控


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论