首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么SELECT有SIU锁( Server 2012)?

问为什么SELECT有SIU锁( Server 2012)?
EN

Stack Overflow用户
提问于 2015-07-17 23:35:12
回答 1查看 884关注 0票数 3

今天,我解决了一个死锁问题,发现了一个非常奇怪的情况(至少我觉得很奇怪)。我有两个并发语句(UPDATE和SELECT),它们导致了一个死锁场景。没问题的。下面是描述我的情况的DeadLock图:

​

​

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

我在MSDN论坛上找到了一个帖子,这解释了非常类似的情况:

分析器显示来自所有会话的当前累积锁。在我将死锁事件导出到xdl文件并在文本编辑器中打开它之后,我发现选择数据的进程具有S锁,更新数据的进程具有IU锁(并且需要IX锁)。资源是SIU锁定(S+IU)。

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

SELECT有SIU锁,因为其他会话有更新的意图

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

update : select语句由EF6.1.2自动生成;update语句是一个存储过程。

EN

回答 1

Stack Overflow用户

发布于 2015-07-19 10:36:57

我认为最终会有DML在同一事务下执行。我知道你说的不是这样的,但我真的不明白如何选择可以采取写锁。

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31486211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档