2015-04-01 237 views
0

有一個導致死鎖錯誤的更新查詢,我不知道爲什麼。在更新查詢中已經使用了(rowlock,updlock)提示,但它仍然會導致死鎖錯誤。導致死鎖錯誤的SQL查詢

示例查詢:

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

此相同的查詢,其中可以同時稱爲幾個存儲過程中使用。但是,由於指定了鎖定,如果它仍然導致死鎖

+0

我想你知道死鎖不會因爲1個查詢而發生嗎?您至少需要2次並且未提交的交易 – 2015-04-01 04:59:02

+0

您必須提供更多上下文才能獲得幫助。也許添加一些代碼片段。 – 2015-04-01 04:59:41

+0

我已更新帖子。這個查詢在幾個可能導致死鎖的地方使用。所以請協助。 – 2015-04-01 05:06:28

回答

0

Deadlock發生在兩個或多個任務永久阻塞彼此時,每個任務鎖定其他任務嘗試鎖定的資源。

由於您明確指定with (rowlock, updlock),它會在交易時添加鎖定。最後,當一個事務正在執行時,它會在表上放置一個鎖。如果另一個事務要訪問同一條記錄,則必須等到前一個事務完成並刪除鎖才能繼續。

使用with NOLOCK可讓您繞過鎖定,但在更新的情況下,這太冒險了。更如此,正如你所提到的,幾個更新可以同時執行。

就你而言,似乎鎖是罪魁禍首。但是,鎖並不是死鎖的唯一來源。它可能是內存問題或線程執行。這LINK可能會幫助您找出死鎖的真正原因。