[SQL SERVER][Maintain]使用trace flag擷取死結資訊

[SQL SERVER][Maintain]使用trace flag擷取死結資訊

之前我有介紹使用Profiler擷取死結資訊,但此種方法相當不好,

因為你得事先開啟Profiler才能取得相關死結資訊,

而且開啟Profiler是相當耗費系統資源,一般來說都不會使用Profiler來處理,

所以這篇就來介紹使用trace flag也可以擷取死結資訊。

 

在SQL Server中有兩種類型的trace flag;分別是global和session。某些trace flag只能設定為global,

某些只能設定為sessiono,某些使兩者皆可。

global: 設定在伺服器層級,只要是該伺服器上相關連線都會顯示。

session:設定在某個特定連線,只會在該連線顯示。

 

接下來我們要設定1204的trace flag(global)來擷取死結資訊。

 

開啟組態管理員>SQL Server服務>修改啟動參數(進階頁籤),新增-T1204

image

設定完後會要求你重新啟動SQL Server服務。

 

確認trace flag status

image

使用DBCC TRACESTATUS

 

模擬死結狀況

image

 

查看SQL Errorlog

image

Errorlog雖然有紀錄deadlock資訊,相較於1204個人還是比較喜歡設定1222。

 

關閉1204 trace flag

image

使用DBCC TRACEOFF

 

修改啟動參數1222 trace flag

image

 

確認trace flag status

image

 

再次模擬死結狀況後查看Errorlog

image

這次deadlock資訊有比較清楚了,可以知道相關死結之鎖定的資源和類型,以及目前受影響的命令。

 

參考

追蹤旗標 (Transact-SQL)

DBCC TRACEOFF

DBCC TRACEON

DBCC TRACESTATUS

偵測與結束死結