我遇到了一个死锁问题,我发现它是由不同线程调用的两个存储过程引起的(两个称为 Web 服务)。
- Insert sp在 X 表中插入数据。
- Delete sp删除 X 表中的数据。
此外,我得到的结果告诉我在 X 表的非唯一和非聚集索引中发生了死锁。你有解决这个问题的想法吗?
更新
从Read/Write deadlock,我认为由于以下语句而出错。
- 在插入语句中,它获取 id(聚集索引),然后是非聚集索引。
- 在 delete 语句中,它在 id 之前获取非聚集索引。
所以,我需要像下面的语句一样为删除语句选择 id。
SELECT id FROM X WITH(NOLOCK) WHERE [condition]
PS。两个存储过程都在事务中调用。
谢谢,