天天看點

SQL Server 死鎖的Trace Flag

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)      
SQL Server 死鎖的Trace Flag

 使用DBCC TRACEON 啟用這兩個Trace Flag:

DBCC TRACEON(1204,1222, -1)      

再次檢視這兩個Trace Flag的狀态,發現Status為1,表示這兩個Trace Flag處于ON狀态:

SQL Server 死鎖的Trace Flag

此時,捕獲死鎖的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/

本文版權歸作者和部落格園所有,歡迎轉載,但未經作者同意,必須保留此段聲明,且在文章頁面醒目位置顯示原文連接配接,否則保留追究法律責任的權利。

繼續閱讀