10

SQL 2005 データベース (64 ビット) で発生しているデッドロックを追跡しようとしています。現在、スナップショット分離は有効になっていません。

tf-1204 をオンにすると、以下の出力が表示されました。

この出力から、ノード 1 はデータを選択し、#temp テーブルの値のみを変更するストアド プロシージャであることがわかります。

ノード 2 は別のストアド プロシージャで、1 行のデータに対して単純な主キー ベースの更新を行います。

私が判断できないのは、ここで競合していた実際のリソースです。10:72057594060734464 と 10:72057594038910976 のキーでデータベースを特定できますが、これらのオブジェクト ID は object_name で解決できません。実際、これらは int 値である必要があるため、これらの大きな数値がどこから来ているのかわかりません。

この問題を調査したところ、Activity Monitor から Object ID についても同様の値を取得できました。

これらのオブジェクト識別子を解決するにはどうすればよいですか?

デッドロック tf-1204 の出力は次のとおりです。

2008-12-05 07:48:28.19 spid4s ----------------------------------
2008-12-05 07:48:28.19 spid4s デッドロック検索の開始 634
2008-12-05 07:48:28.19 spid4s ターゲット リソース所有者:
2008-12-05 07:48:28.19 spid4s ResType:LockOwner Stype:'OR'Xdes:0x00000000813B8700 モード:X SPID:77 BatchID:0 ECID:0 TaskProxy:(0x00000000CE6D8598) 値:0x1043f980
2008-12-05 07:48:28.19 spid4s 0: 新しいノードを挿入: ノード:1 ResType:LockOwner Stype:'OR'Xdes:0x00000000813B8700 モード: X SPID:77 BatchID:0 ECID:0 TaskProxy:(0x00000000CE6D8598) 値: 0x1043f980
2008-12-05 07:48:28.19 spid4s 1:SearchOR 新しいブロッカーを検討中 - タスク: 0000000000EC5198、ワーカー 00000000C89881C0
2008-12-05 07:48:28.19 spid4s 2: 新しいノードを挿入: ノード:2 ResType:LockOwner Stype:'OR'Xdes:0x0000000808F1A80 モード: S SPID:79 BatchID:0 ECID:0 TaskProxy:(0x0000000129E82598) 値: 0x1063d000
2008-12-05 07:48:28.19 spid4s 3:SearchOR 新しいブロッカーを検討中 - タスク: 0000000000C3FC18、ワーカー 00000000F847C1C0
2008-12-05 07:48:28.19 spid4s 4:InsertKnown サイクルが古い res 所有者の間で見つかりました: [ ResType:LockOwner Stype:'OR'Xdes:0x00000000813B8700 モード: X SPID:77 BatchID:0 ECID:0 TaskProxy:(0x00000000CE6D8598) Value:0x1043f980] および新しいリソース所有者 [ ResType:LockOwner Stype:'OR'Xdes:0x00000000813B8700 Mode: X SPID:77 BatchID:0 ECID:0 TaskProxy:(0x00000000CE6D8598) Value:0x1043f980]
2008-12-05 07:48:28.19 spid4s 4:InsertKnown 検索結果: デッドロックが見つかりました (ブロッキング所有者がスタックにあります)
2008-12-05 07:48:28.19 spid4s 3:SearchOR 検索結果: デッドロックが見つかりました (このレベルまたは前のサイクル)
2008-12-05 07:48:28.19 spid4s 1:SearchOR 検索結果: デッドロックが見つかりました (このレベルまたは前のサイクル)
2008-12-05 07:48:28.19 spid4s      
2008-12-05 07:48:28.19 spid4s デッドロック サイクルが発生しました .... サイクルの検証中
2008-12-05 07:48:28.19 spid4s 0: 新しいノードを挿入: ノード:1 ResType:LockOwner Stype:'OR'Xdes:0x00000000813B8700 モード: X SPID:77 BatchID:0 ECID:0 TaskProxy:(0x00000000CE6D8598) 値: 0x1043f980 コスト:(0/1544)
2008-12-05 07:48:28.19 spid4s 1:SearchOR 新しいブロッカーを検討中 - タスク: 0000000000EC5198、ワーカー 00000000C89881C0
2008-12-05 07:48:28.19 spid4s 2: 新しいノードを挿入: ノード:2 ResType:LockOwner Stype:'OR'Xdes:0x0000000808F1A80 モード: S SPID:79 BatchID:0 ECID:0 TaskProxy:(0x0000000129E82598) 値: 0x1063d000 コスト:(0/0)
2008-12-05 07:48:28.19 spid4s 3:SearchOR 新しいブロッカーを検討中 - タスク: 0000000000C3FC18、ワーカー 00000000F847C1C0
2008-12-05 07:48:28.19 spid4s 4:InsertKnown サイクルが古い res 所有者の間で見つかりました: [ ResType:LockOwner Stype:'OR'Xdes:0x00000000813B8700 モード: X SPID:77 BatchID:0 ECID:0 TaskProxy:(0x00000000CE6D8598) Value:0x1043f980 Cost:(0/1544)] および新しいリソース所有者 [ ResType:LockOwner Stype:'OR'Xdes:0x00000000813B8700 Mode: X SPID:77 BatchID:0 ECID:0 TaskProxy:(0x00000000CE6D8598) Value:0x1043f980 Cost:( 0/1544)]
2008-12-05 07:48:28.19 spid4s 4:InsertKnown 検索結果: デッドロックが見つかりました (ブロッキング所有者がスタックにあります)
2008-12-05 07:48:28.19 spid4s 3:SearchOR 検索結果: デッドロックが見つかりました (このレベルまたは前のサイクル)
2008-12-05 07:48:28.19 spid4s 1:SearchOR 検索結果: デッドロックが見つかりました (このレベルまたは前のサイクル)
2008-12-05 07:48:28.19 spid4s デッドロックが発生しました.... デッドロック情報の出力
2008-12-05 07:48:28.19 spid4s 待機グラフ
2008-12-05 07:48:28.19 spid4s      
2008-12-05 07:48:28.19 spid4s ノード:1

2008-12-05 07:48:28.19 spid4s キー: 10:72057594060734464 (c80089667602) CleanCnt:3 モード:S フラグ: 0x0
2008-12-05 07:48:28.19 spid4s 付与リスト 1:
2008-12-05 07:48:28.19 spid4s 所有者: 0x000000011063CDC0 モード: S Flg:0x0 Ref:1 ライフ:00000000 SPID:79 ECID:0 XactLockInfo: 0x00000000808F1AB8
2008-12-05 07:48:28.19 spid4s SPID: 79 ECID: 0 ステートメントの種類: INSERT 行番号: 220
2008-12-05 07:48:28.19 spid4s 入力 Buf: RPC イベント: Proc [データベース Id = 10 オブジェクト Id = 1751794144]
2008-12-05 07:48:28.19 spid4s 要求者:
2008-12-05 07:48:28.19 spid4s ResType:LockOwner Stype:'OR'Xdes:0x00000000813B8700 モード:X SPID:77 BatchID:0 ECID:0 TaskProxy:(0x00000000CE6D8598) 値:0x1043f980 コスト:(0/1544)
2008-12-05 07:48:28.19 spid4s      
2008-12-05 07:48:28.19 spid4s ノード:2

2008-12-05 07:48:28.19 spid4s キー: 10:72057594038910976 (0c0092f62b82) CleanCnt:2 モード:X フラグ: 0x0
2008-12-05 07:48:28.19 spid4s 付与リスト 0:
2008-12-05 07:48:28.19 spid4s 所有者: 0x000000011043F300 モード: X Flg:0x0 Ref:0 ライフ:02000000 SPID:77 ECID:0 XactLockInfo: 0x00000000813B8738
2008-12-05 07:48:28.19 spid4s SPID: 77 ECID: 0 ステートメントの種類: UPDATE 行番号: 23
2008-12-05 07:48:28.19 spid4s 入力 Buf: RPC イベント: Proc [データベース ID = 10 オブジェクト ID = 1791462302]
2008-12-05 07:48:28.19 spid4s 要求者:
2008-12-05 07:48:28.19 spid4s ResType:LockOwner Stype:'OR'Xdes:0x00000000808F1A80 モード:S SPID:79 BatchID:0 ECID:0 TaskProxy:(0x0000000129E82598) 値:0x1063d000 コスト:(0/0)
2008-12-05 07:48:28.19 spid4s      
2008-12-05 07:48:28.19 spid4s 被害者リソース所有者:
2008-12-05 07:48:28.19 spid4s ResType:LockOwner Stype:'OR'Xdes:0x00000000808F1A80 モード:S SPID:79 BatchID:0 ECID:0 TaskProxy:(0x0000000129E82598) 値:0x1063d000 コスト:(0/0)
2008-12-05 07:48:28.19 spid4s デッドロック検索の終了 634 ... デッドロックが見つかりました。
2008-12-05 07:48:28.19 spid4s ----------------------------------
4

1 に答える 1

14

これらの ID は、実際には sys.partitions にある hobt (ヒープまたはバイナリ ツリー) を参照します。データベース 10 内で次のクエリを実行すると、どのオブジェクトとどのインデックスが影響を受けているかがわかります。

SELECT hobt_id, object_name(p.[object_id]), index_id 
FROM sys.partitions p 
WHERE hobt_id = 72057594060734464
于 2008-12-09T22:28:03.913 に答える