お願いします。最近トラフィックが大幅に増加した実稼働データベースで大量のロックが発生しています。ほとんどのデータ アクセスに IdeaBlade を使用しています。
Sql Profiler を使用して次のトレースを取得しました。
deadlock victim="process84af28"
resource-list
keylock hobtid="72057594096451584" dbid="6" objectname="cpc_db.dbo.Prefix_ChildTableName" indexname="PK_Prefix_ChildTableName" id="lock45982ac0" mode="X" associatedObjectId="72057594096451584"
owner-list
owner id="processb852e8" mode="X"
owner-list
waiter-list
waiter id="process84af28" mode="S" requestType="wait"
waiter id="processb855b8" mode="RangeS-U" requestType="wait"
waiter-list
keylock
keylock hobtid="72057594096451584" dbid="6" objectname="cpc_db.dbo.Prefix_ChildTableName" indexname="PK_Prefix_ChildTableName" id="lock513c3bc0" mode="RangeS-U" associatedObjectId="72057594096451584"
owner-list
owner id="processb855b8" mode="RangeS-U"
owner-list
waiter-list
waiter id="processb852e8" mode="RangeS-U" requestType="wait"
waiter-list
keylock
resource-list
deadlock
アイデアはありますか?
私は DBA ではありませんが、このトレースは次のことを示しているようです。
子テーブルの行で排他ロック X を持つプロセスが、同じリソースで Select-Update ロックを取得しようとしています (意味がないようです)。
Select-Update ロックを使用する別のプロセスが、引き続き Select-Update ロックを取得しようとしています。
説明はありますか?
デッドロックを最小限に抑える、またはなくすにはどうすればよいでしょうか?