首页 > 开发 > 综合 > 正文

如何使用跟踪标记 1204

2024-07-21 02:12:03
字体:
来源:转载
供稿:网友

-- =====================================================
-- 如何使用跟踪标记 1204
--
-- 邹建 2005.08(引用请保留此信息)
-- =====================================================

-- =====================================================
/*-- 说明

    跟踪标记 1204 用于返回参与死锁的锁的类型以及当前受影响的命令。死锁信息将自动发送到错误日志。
    开启跟踪标记使用 dbcc traceon ,第3个参数指定为-1,表示不单单针对当前connection,而是针对所有包括未来建立的connection
    关闭跟踪标记使用 dbcc traceoff
       
    下面是在查询分析器中使用跟踪标记 1204 的演示, 死锁的信息被记录在 sql server 日志中,可以通过下面的方法查看:
    企业管理器 -- 展开实例 -- 管理 -- sql server 日志
    由于在企业管理器中查看时, 部分日志信息会被截断, 所以所以建议使用记事本一类的文本查看工具直接查看 /mssql/log 目录下的 errorlog 文件

    有关死锁信息的详细说明参考联机帮助(联机丛书--菜单中的go--url--输入下面的地址:
    mk:@msitstore:c:/program%20files/microsoft%20sql%20server/80/tools/books/trblsql.chm::/tr_servdatabse_5xrn.htm
--*/
-- =====================================================

-- 测试环境
use tempdb
go

create table ta(id int)
insert ta select 1

create table tb(id int)
insert tb select 1
go

-- 开启死锁记录
dbcc traceon(1204,3605,-1)
go

-- 产生死锁 (打一个新连接, 复制此段代码并且执行)
set lock_timeout -1
set deadlock_priority low
set transaction isolation level
    repeatable read
begin tran
    select * from ta where id=1
    waitfor delay '00:05:00'
    update tb set id=2 where id=1
commit tran
go

-- 关闭死锁记录
dbcc traceoff(1204,3605)
go

-- 清除测试
drop table ta,tb
go

-- 1204 产生的日志记录信息
2005-08-25 08:16:21.85 spid4     node:1
2005-08-25 08:16:21.85 spid4     rid: 2:1:28:0                  cleancnt:2 mode: u flags: 0x2
2005-08-25 08:16:21.85 spid4      grant list 0::
2005-08-25 08:16:21.85 spid4        owner:0x1998aec0 mode: s        flg:0x0 ref:1 life:02000000 spid:52 ecid:0
2005-08-25 08:16:21.85 spid4        spid: 52 ecid: 0 statement type: update line #: 1
2005-08-25 08:16:21.85 spid4        input buf: language event: set lock_timeout -1
set transaction isolation level
    repeatable read
begin tran
    select * from tb where id=1
    waitfor delay '00:01:00'
    update ta set id=2 where id=1
commit tran

2005-08-25 08:16:21.85 spid4      requested by:
2005-08-25 08:16:21.85 spid4        restype:lockowner stype:'or' mode: x spid:51 ecid:0 ec:(0x19b5b558) value:0x1997b2c0 cost:(1/0)

2005-08-25 08:16:21.85 spid4     node:2
2005-08-25 08:16:21.85 spid4     rid: 2:1:15:0                  cleancnt:2 mode: u flags: 0x2
2005-08-25 08:16:21.85 spid4      grant list 0::
2005-08-25 08:16:21.85 spid4        owner:0x1997b3e0 mode: s        flg:0x0 ref:1 life:02000000 spid:51 ecid:0
2005-08-25 08:16:21.85 spid4        spid: 51 ecid: 0 statement type: update line #: 1
2005-08-25 08:16:21.85 spid4        input buf: language event:
set lock_timeout -1
set deadlock_priority low
set transaction isolation level
    repeatable read
begin tran
    select * from ta where id=1
    waitfor delay '00:01:00'
    update tb set id=2 where id=1
commit tran

2005-08-25 08:16:21.85 spid4      requested by:
2005-08-25 08:16:21.85 spid4        restype:lockowner stype:'or' mode: x spid:52 ecid:0 ec:(0x1a24d558) value:0x1998cfa0 cost:(0/0)
2005-08-25 08:16:21.85 spid4     victim resource owner:
2005-08-25 08:16:21.85 spid4      restype:lockowner stype:'or' mode: x spid:51 ecid:0 ec:(0x19b5b558) value:0x1997b2c0 cost:(1/0)

-- 分析日志记录信息, 以分析 node:1 为例, --** 标注的是说明
--** node:x 在死锁的链中表示项目号 (x)。
2005-08-25 08:16:21.85 spid4     node:1
2005-08-25 08:16:21.85 spid4     rid: 2:1:28:0                  cleancnt:2 mode: u flags: 0x2
--** lists, 可以是授权(grant)、转换(convert)和等待(wait),grant list列举当前授权的所有者.
2005-08-25 08:16:21.85 spid4      grant list 0::
2005-08-25 08:16:21.85 spid4        owner:0x1998aec0 mode: s        flg:0x0 ref:1 life:02000000 spid:52 ecid:0
--** 在并行进程情况下,标识系统进程 id 线程。条目 spid x ecid 0 表示主线程,而 spid x ecid > 0 表示同一 spid 的子线程。
--** statement type: 语句类型
--** line #:死锁发生时,正在执行的语句的行号
2005-08-25 08:16:21.85 spid4        spid: 52 ecid: 0 statement type: update line #: 1
--** input buf 列出当前批处理中所有的语句。
2005-08-25 08:16:21.85 spid4        input buf: language event:
set lock_timeout -1
set transaction isolation level
    repeatable read
begin tran
    select * from tb where id=1
    waitfor delay '00:01:00'
    update ta set id=2 where id=1
commit tran

2005-08-25 08:16:21.85 spid4      requested by:
--** mode 为线程请求、授权或等待的特定资源,指定锁的类型。模式可以是 is(意向共享)、s(共享)、u(更新)、ix(意向独占)、six(与意向独占共享)和 x(独占)
2005-08-25 08:16:21.85 spid4        restype:lockowner stype:'or' mode: x spid:51 ecid:0 ec:(0x19b5b558) value:0x1997b2c0 cost:(1/0)


 


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表