如何使用跟蹤標記 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(獨佔)
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)

 


本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/zjcxc/archive/2005/08/25/464682.aspx

發佈了25 篇原創文章 · 獲贊 6 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章