トレースフラグ 1204 を設定して SQL Server を起動すると,デッドロックに関するレポートが起動したコンソールに返され,エラーログに記録されるようになります。このレポートを利用して,デッドロックの状況を解析することができます。
実際にデッドロックが発生すると,以下の様なレポートが出力されます。
ここでは,例としてサイクルデッドロックのレポートを表示しています。
Deadlock encountered .... Printing deadlock information
2005-06-28 12:53:17.48 spid4
2005-06-28 12:53:17.48 spid4 Wait-for graph
2005-06-28 12:53:17.48 spid4
2005-06-28 12:53:17.48 spid4 Node:1
2005-06-28 12:53:17.48 spid4 RID: 7:1:36:0 CleanCnt:1 Mode: X Flags: 0x2
2005-06-28 12:53:17.48 spid4 Grant List 0::
2005-06-28 12:53:17.48 spid4 Owner:0x19943340 Mode: X Flg:0x0 Ref:0 Life:02000000 SPID:53 ECID:0
2005-06-28 12:53:17.48 spid4 SPID: 53 ECID: 0 Statement Type: UPDATE Line #: 1
2005-06-28 12:53:17.50 spid4 Input Buf: Language Event: UPDATE [DataA] SET [DATA] = ''
2005-06-28 12:53:17.50 spid4 Requested By:
2005-06-28 12:53:17.50 spid4 ResType:LockOwner Stype:'OR' Mode: U SPID:51 ECID:0 Ec:(0x19ED9520) Value:0x199379a0 Cost:(0/1EC)
2005-06-28 12:53:17.51 spid4
2005-06-28 12:53:17.51 spid4 Node:2
2005-06-28 12:53:17.51 spid4 RID: 7:1:34:0 CleanCnt:1 Mode: X Flags: 0x2
2005-06-28 12:53:17.51 spid4 Grant List 0::
2005-06-28 12:53:17.51 spid4 Owner:0x19943400 Mode: X Flg:0x0 Ref:0 Life:02000000 SPID:51 ECID:0
2005-06-28 12:53:17.51 spid4 SPID: 51 ECID: 0 Statement Type: UPDATE Line #: 1
2005-06-28 12:53:17.51 spid4 Input Buf: Language Event: UPDATE [DataB] SET [DATA] = ''
2005-06-28 12:53:17.51 spid4 Requested By:
2005-06-28 12:53:17.53 spid4 ResType:LockOwner Stype:'OR' Mode: U SPID:53 ECID:0 Ec:(0x19F05520) Value:0x19937940 Cost:(0/120)
2005-06-28 12:53:17.53 spid4 Victim Resource Owner:
2005-06-28 12:53:17.53 spid4 ResType:LockOwner Stype:'OR' Mode: U SPID:53 ECID:0 Ec:(0x19F05520) Value:0x19937940 Cost:(0/120)
このレポートから読み取るべき情報は,
「[TestDatabase] の [DataA] テーブルと [DataB] テーブルを更新しようとした [SPID:53] と [SPID:51] がデッドロックを発生させて, [SPID:53] が停止された」
となります。
さらに,アンドキュメンテッドストアドプロシージャ [sp_MSget_current_activity] を使用すれば,[Enterprise Manager] で表示できる情報と同等の結果を得ることもできます。