之前介紹過如何用Profiler抓到Deadlock事件,在實務上,Deadlock的發生時機不是很容易掌握,而且多發生在尖峰時刻,一直開著Profiler將是挺沈重的系統負擔。因此,我認為以錯誤事件的態度面對Deadlock, 要求其在發生時留下Log是比較有效率掌握Deadlock相關情報(尤其是導致Deadlock的T-SQL指令)的做法。查了一下,SQL Server上可以利用DBCC TRACEON開啟與Deadlock相關的幾個Flag: 1204, 1205, 3605,如要長期開啟,則可以加入-T1205等啟動參數,詳細說明可以參考這篇官方KB[Update @ 2007/10/23] SQL Server 2005 是開 1204 與 1222才對,前述的KB 832524 是針對 SQL Server 2000 的。細節可參考 http://msdn2.microsoft.com/en-us/library/ms178104.aspx,謝謝網友默默指正。

傳統做法似乎要另外開SQLDiag工具蒐集Log,但我發現從SQL 2005的Log Viewer就可以找到發生Deadlock的SQL指令囉!


Comments

# by 默默

SQL Server 2005 是開 1204 與 1222,KB 832524 是針對 SQL Server 2000 的。 可以參考 http://msdn2.microsoft.com/en-us/library/ms178104.aspx

# by Jeffrey

To 默默,謝謝指正! 我更正內容了。

Post a comment