gpt4 book ai didi

sql-server - 如何解决非聚集索引上的插入/删除死锁?

转载 作者:行者123 更新时间:2023-12-03 09:36:04 25 4
gpt4 key购买 nike

我遇到了死锁问题,我发现它是由不同线程调用的两个存储过程引起的(2 个称为 Web 服务)。

  1. Insert sp在X表中插入数据。
  2. Delete sp删除X表中的数据。

此外,我得到的结果告诉我在 X 表的非唯一和非聚集索引中发生了死锁。你有解决这个问题的想法吗?

更新

来自 Read/Write deadlock ,我认为它是错误的,因为以下语句。

  • 在insert语句中,获取id(聚集索引),然后获取非聚集索引。
  • 在delete语句中,获取id前的非聚集索引。

因此,我需要像下面的语句一样为删除语句选择 id。

SELECT id FROM X WITH(NOLOCK) WHERE [condition]

附言。两个存储过程都在事务中调用。

谢谢,

最佳答案

我们必须看到某种代码……你提到了交易;它处于什么隔离级别?可以尝试的一件事是将 (UPDLOCK) 提示添加到用于查找行(或检查是否存在)的任何查询中;所以你将从一开始就取出写锁(而不是读锁)。

当有争议时,这应该会导致(非常短暂的)阻塞而不是死锁。

关于sql-server - 如何解决非聚集索引上的插入/删除死锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1175714/

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