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:\xx\Trace_xxxx_.trc',default) 
where TextData like '%xxxx%'

 

 

参考文档:

DBCC TRACEON - Trace Flags (Transact-SQL)

Transaction Locking and Row Versioning Guide

posted @ 2020-08-06 16:18  悦光阴  阅读(540)  评论(1编辑  收藏  举报