gpt4 book ai didi

sql-server - 为什么SELECT可以有SIU锁(SQL Server 2012)?

转载 作者:行者123 更新时间:2023-12-02 07:34:08 33 4
gpt4 key购买 nike

今天在排查一个死锁的情况时,发现了一个相当奇怪的情况(至少我觉得很奇怪)。我有两个并发语句(UPDATESELECT),它们导致了死锁情况。毫无疑问。下面是死锁图,描述了我的情况:

deadlock graph

令我困扰的是SELECT 持有的锁类型。为什么是SIU(与实习生更新共享),而不是S(共享)或IS(意图共享)锁?

我找到了post在 MSDN 论坛上,它解释了非常相似的情况:

Profiler shows current cumulative lock from all sessions. After I exported deadlock event to xdl-file and opened it in text editor I found that process which selects data has S lock and process that updates data has IU lock (and wants IX lock). And resource is SIU-locked (S+IU).

对我来说,这听起来像(并且没有任何意义):

SELECT has SIU lock, because some other session has an intent to do an UPDATE

有人可以解释一下为什么 SELECT 持有 SIU 锁吗?

更新: select 语句由 EF 6.1.2 自动生成;更新语句是一个存储过程。

最佳答案

我认为结果是在同一事务下执行了 DML。我知道您说过情况并非如此,但我真的不明白选择如何获取写锁。

附加探查器并捕获所有语句和事务操作(TM 事件)。也许您会发现同一 session 和事务中发生的事情比您预期的要多。

提交这个猜测作为答案,因为它似乎很可能是解决方案。

关于sql-server - 为什么SELECT可以有SIU锁(SQL Server 2012)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31486211/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com