• SQL Server 死锁的Trace Flag


    SQL Server 跟死锁相关的Trace Flag是 1204 和 1222,两个Trace Flag的Scope都是global only,两者记录的信息基本相同,都会把造成死锁的两个事务、抢占的资源、死锁类型和命令记录下来。前者是以文本格式记录,后者是以XML格式记录的,可以同时打开这两个追踪标志,记录的数据都存储在错误日志(Error Log)中。

    微软的官方文档对这两个Trace Falg的定义是:

    • 1204:Returns the resources and types of locks participating in a deadlock and also the current command affected. 
    • 1222:Returns the resources and types of locks that are participating in a deadlock and also the current command affected, in an XML format that does not comply with any XSD schema. 

    一,打开追踪标志

    使用DBCC TRACESTATUS 来查看这两个Trace Flag的状态,Status为0,表示当前这两个Trace Flag都处于OFF状态:

    DBCC TRACESTATUS(1204,1222, -1)

     使用DBCC TRACEON 启用这两个Trace Flag:

    DBCC TRACEON(1204,1222, -1)

    再次查看这两个Trace Flag的状态,发现Status为1,表示这两个Trace Flag处于ON状态:

    此时,捕获死锁的Trace已经配置完成,一旦系统检测到死锁,就会把死锁发生时的消息都记录到错误日志中。

    二,分析追踪数据

    在对错误日志进行分析时,通常会需要对数据页进行分析:

    DBCC TRACEON (3604) 
    DBCC PAGE('XXXX',file_id,page_id,3) WITH TABLERESULTS
    DBCC TRACEOFF (3604)

    查看Trace 文件:

    select top 10 * 
    from fn_trace_gettable('x:xxTrace_xxxx_.trc',default) 
    where TextData like '%xxxx%'

    参考文档:

    DBCC TRACEON - Trace Flags (Transact-SQL)

    Transaction Locking and Row Versioning Guide

  • 相关阅读:
    异常处理(五)
    抽象与接口(七)
    MYSQL创建数据库时候直接指定编码和排序规则
    C#基本语法(一)
    C#中字符串处理(三)
    Ajax实例化(五)
    C#函数(二)
    MemberCache学习摘要
    ORACLE 根据日期范围自动日期table
    动态执行SQL语句,并输出参数
  • 原文地址:https://www.cnblogs.com/ljhdo/p/13025801.html
Copyright © 2020-2023  润新知