-- =====================================================
-- 如何使用跟蹤標記 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