zoukankan      html  css  js  c++  java
  • 如何使用跟踪标记 1204

    -- =====================================================
    -- 如何使用跟踪标记 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

    -- 产生死锁 (查询窗口A)

    SET LOCK_TIMEOUT -1
    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

    -- 产生死锁 (查询窗口B)

    SET LOCK_TIMEOUT -1
    SET DEADLOCK_PRIORITY LOW
    SET TRANSACTION ISOLATION LEVEL
        REPEATABLE READ
    BEGIN TRAN
        SELECT * FROM tb WHERE id=1
        UPDATE ta 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(独占)

  • 相关阅读:
    阿铭每日一题 day 1 20180111
    计算机网络之基础链路
    android学习笔记 对话框合集
    android 音乐播放器简单实现
    Service的生命周期&Service绑定方法
    android学习笔记 Service
    android学习笔记 activity生命周期&任务栈&activity启动模式
    android 短信助手demo
    android 显示意图
    java 多线程断点下载demo
  • 原文地址:https://www.cnblogs.com/zhuawang/p/1257841.html
Copyright © 2011-2022 走看看