请。我们已经在最近见证了流量大幅增加的生产数据库上获得了很多锁。我们使用 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 锁
澄清任何人?
我们如何才能最大限度地减少或消除死锁?