gpt4 book ai didi

sql-server - SQL Server 在选择/更新或多选择之间死锁

转载 作者:行者123 更新时间:2023-12-01 18:41:04 26 4
gpt4 key购买 nike

有关 SQL Server 死锁的所有文档都讨论了这样的场景:操作 1 锁定资源 A,然后尝试访问资源 B,而操作 2 锁定资源 B 并尝试访问资源 A。

但是,我经常在一些繁忙的应用程序中看到选择和更新之间甚至多个选择之间的死锁。我发现死锁跟踪输出的一些细节非常难以理解,但我真的只想了解什么会导致两个单个操作之间的死锁。当然,如果选择有读锁,则更新应该在获取排它锁之前等待,反之亦然?

这种情况发生在 SQL Server 2005 上,但我认为这不会产生影响。

最佳答案

发生这种情况是因为选择锁定了两个不同的索引,同时更新以相反的顺序锁定了相同的索引。 select 需要两个索引,因为第一个索引没有覆盖它需要访问的所有列;更新需要两个索引,因为如果您更新索引的键列,则需要锁定它。

http://blogs.msdn.com/bartd/archive/2006/09/25/770928.aspx有一个很棒的解释。建议的修复包括添加一个涵盖 select 所需的所有列的索引、切换到快照隔离或显式强制 select 获取通常不需要的更新锁。

关于sql-server - SQL Server 在选择/更新或多选择之间死锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/661908/

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