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
作者:悅光陰
出處:http://www.cnblogs.com/ljhdo/
本文版權歸作者和部落格園所有,歡迎轉載,但未經作者同意,必須保留此段聲明,且在文章頁面醒目位置顯示原文連接配接,否則保留追究法律責任的權利。