来自2个存储过程的2个查询之间的死锁

时间:2017-08-16 19:51:42

标签: tsql stored-procedures deadlock sql-server-2016

我有这个奇怪的死锁问题一直困扰着我。方案如下:

Deadlock_Graph

根据照片,第二个存储过程无法更新该锦标赛号码的数据,直到它首次插入表格中。它如何在这种情况下陷入僵局,我怎样才能重现它并避免它呢?

感谢。

第二个截图:

Deadlock_Graph 2

1 个答案:

答案 0 :(得分:1)

请参阅有关前导问题的主要问题的评论。这里的问题是两个表(AB)的顺序不同,所以它是这样的:

  1. SP1完成并释放id n1。
  2. SP2获取id n1并锁定表B
  3. SP1以新号码和锁定表A开头。然后尝试锁定表B,但SP2有它。
  4. SP2现在尝试锁定表A,但SP1有它。
  5. <强>死锁

      

    注意:这基本上是每个死锁发生在它周围的一些复杂的绒毛。这完全是关于锁定表并释放它们的顺序。如果一切都按照相同的顺序锁定和释放,那么你永远不会陷入僵局。