【问题标题】:SQL Server two update locks held on the same object at the same timeSQL Server 两个更新锁同时持有在同一个对象上
【发布时间】:2020-09-21 01:32:09
【问题描述】:

考虑一下 SQL Server 死锁错误日志中的这个 sn-p。

版本是:

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

【问题讨论】:

    标签: sql sql-server deadlock database-deadlocks


    【解决方案1】:

    似乎两个不同的进程同时持有PK_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

    每个会话拥有一个锁,并且正在等待另一个会话拥有的锁。

    lock621a0ce00 归 process61c7804e8 所有,而 process614a23088 正在等待它。

    lock61807a800 归 process614a23088 所有,而 process61c7804e8 正在等待它。

    【讨论】:

    • 是的。同一张桌子上有两个不同的钥匙锁。每个锁由一个会话拥有,并由另一个会话等待。香草僵局。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-19
    • 2021-04-23
    • 1970-01-01
    • 2010-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多