小编Jen*_*ens的帖子

更新堆表 -> RID 上的死锁

我正在设置一个测试用例来证明某个死锁场景,并需要对正在发生的事情有一些了解。我有一个堆表,方便地称为 HeapTable。该表由 2 个事务模拟更新。

交易1:

BEGIN TRAN

UPDATE HeapTable
SET FirstName = 'Dylan'
WHERE FirstName = 'Ovidiu';

WAITFOR DELAY '00:00:15';

UPDATE HeapTable
SET FirstName = 'Bob'
WHERE FirstName = 'Thierry';

ROLLBACK TRANSACTION
Run Code Online (Sandbox Code Playgroud)

交易2:

BEGIN TRAN

UPDATE HeapTable
SET FirstName = 'Pierre'
WHERE FirstName = 'Michael';

ROLLBACK TRAN
Run Code Online (Sandbox Code Playgroud)

我首先触发事务 1,紧接着是事务 2。正如预期的那样,事务 1 将要求一些排他锁,以及一些意图排他的锁。事务 2 将进入并请求同一 RID 上的更新锁:

spid dbid   ObjId       IndId   Type    Resource     Mode   Status
55    5     711673583   0       RID     1:24336:10   X      GRANT
57    5     711673583   0       RID     1:24336:10   U      WAIT …
Run Code Online (Sandbox Code Playgroud)

sql-server deadlock

8
推荐指数
1
解决办法
935
查看次数

标签 统计

deadlock ×1

sql-server ×1