sql server同时在同一对象上保留两个更新锁

xmd2e60i  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(366)

请考虑sql server死锁错误日志中的此代码段。
版本为:

Microsoft SQL Server 2017 (RTM-CU13) (KB4466404) - 14.0.3048.4 (X64) 
Copyright (C) 2017 Microsoft Corporation        Nov 30 2018 12:57:58 
Developer Edition (64-bit)

似乎有两个不同的进程持有更新锁 PK_mytable 同时。
有人能解释一下这是怎么回事吗?
我的理解是这不可能。。。。
谢谢,基思。

objectname=mydb.myschema.mytable 
indexname=PK_mytable id=lock621a0ce00 mode=U associatedObjectId=72057594046119936
2020-06-02 09:50:07.020 spid32s     owner-list
2020-06-02 09:50:07.020 spid32s      owner id=process61c7804e8 mode=U
2020-06-02 09:50:07.020 spid32s     waiter-list
2020-06-02 09:50:07.020 spid32s      waiter id=process614a23088 mode=U requestType=wait
2020-06-02 09:50:07.020 spid32s    keylock hobtid=72057594046119936 dbid=5 objectname=mydb.myschema.mytable 
indexname=PK_mytable id=lock61807a800 mode=U associatedObjectId=72057594046119936
2020-06-02 09:50:07.030 spid32s     owner-list
2020-06-02 09:50:07.030 spid32s      owner id=process614a23088 mode=U
2020-06-02 09:50:07.030 spid32s     waiter-list
2020-06-02 09:50:07.030 spid32s      waiter id=process61c7804e8 mode=U 
requestType=wait
syqv5f0l

syqv5f0l1#

似乎有两个不同的进程同时持有pk\u mytable上的更新锁。
一个会话拥有锁,另一个会话正在等待锁。
2020-06-02 09:50:07.020 spid32s所有者列表2020-06-02 09:50:07.020 spid32s所有者id=process61c7804e8 mode=u
2020-06-02 09:50:07.020 spid32s服务员列表2020-06-02 09:50:07.020 spid32s服务员id=process614a23088 mode=u requesttype=wait
每个会话拥有一个锁,并且正在等待另一个会话拥有的锁。
锁621a0ce00归进程61c7804e8所有,进程614a23088正在等待它。
锁61807A800属于process614a23088,process61c7804e8正在等待它。

相关问题