2017-08-16 61 views
1

我有這個奇怪的死鎖問題,一直在竊聽我。該方案如下:來自2個存儲過程的2個查詢之間的死鎖

Deadlock_Graph

按照照片,第二存儲過程不能,直到它在表中被第一次插入更新該錦標賽數字數據。在這種情況下它怎麼可能會陷入僵局?我怎樣才能重現它並避免它呢?

謝謝。

第二截圖:

Deadlock_Graph 2

+0

我們可以看到特效? –

+0

沒有辦法讓我們用給出的信息100%回答這個問題,但我猜測該圖不包括鏈接表,那些表導致了死鎖。另一個可能的原因是SP2正在更新多行並進行一次更新,但在等待下一次更新時不釋放表鎖。 – Hogan

+0

@AaronDietz - 更新後,我添加了第二張照片。 – Claudio

回答

1

查看主要問題的意見的前同步。這裏的問題是兩個表(AB)以不同的順序,因此發生這樣的事情:

  1. SP1完成並釋放ID N1。
  2. SP2採用id n1並鎖定表B
  3. SP1以新號碼開始並鎖定表A。然後嘗試鎖定表B但SP2有它。
  4. SP2現在試圖鎖定表A,但SP1有它。

僵局

注:這基本上是每一個僵局如何發生的圍繞它只是一些複雜的絨毛。這是關於鎖定表格並釋放它們的順序。如果所有內容都以相同的順序鎖定和釋放,則永遠不應該發生死鎖。

+0

@Hogan無效:-(我嘗試過,但第一個SP只是插入新的比賽號碼,沒有任何問題,即使鎖定在桌面上並且SP2沒有死鎖。 – Claudio

+0

@Claudio - 什麼沒有工作嗎?這聽起來像是改變SP2的順序,使它不是死鎖 - 是不是目標? – Hogan

+0

是的,但我試圖首先重現它作爲開發環境,它不會死鎖任何方式。它是不能被再現的那些之一(例如,甚至當使用WAITFOR DELAY'00:00:10'時)? – Claudio