导致死锁错误的SQL查询

时间:2015-04-01 04:56:11

标签: sql deadlock

有一个更新查询导致死锁错误我不知道为什么。在更新查询中已经使用了(rowlock,updlock)提示,但仍会出现死锁错误。

示例查询:

update table a with (rowlock, updlock) 
set a.column1 = value

这个相同的查询用于几个可以同时调用的存储过程。但是,如果指定了锁,它仍然会导致死锁

1 个答案:

答案 0 :(得分:0)

当两个或多个任务通过锁定其他任务试图锁定的资源的每个任务永久地相互阻塞时,会发生

Deadlock

由于您明确指定在事务处添加锁定的with (rowlock, updlock)。最终,当一个事务正在执行时,它会锁定表。如果另一个事务想要访问同一个记录,则必须等到上一个事务完成并移除锁定才能继续。

使用with NOLOCK可以绕过锁,但是在更新的情况下,这样做太冒险了。更重要的是,正如您所提到的,可以同时执行多个更新。

在你的情况下,锁似乎是罪魁祸首。但是,Locks并不是死锁的唯一来源。它也可能是内存问题或线程执行。这个LINK可能会帮助您找出导致死锁的真正原因。