[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
設定完後會要求你重新啟動SQL Server服務。
確認trace flag status
模擬死結狀況
查看SQL Errorlog
Errorlog雖然有紀錄deadlock資訊,相較於1204個人還是比較喜歡設定1222。
關閉1204 trace flag
修改啟動參數1222 trace flag
確認trace flag status
再次模擬死結狀況後查看Errorlog
這次deadlock資訊有比較清楚了,可以知道相關死結之鎖定的資源和類型,以及目前受影響的命令。
參考