簡體   English   中英

SQL Server - 聚簇索引上的死鎖

[英]SQL Server - Deadlock on clustered index

我有一個表A,主鍵上有聚簇索引,第二列上有非聚集索引(act_id)(表B的外鍵)

兩個更新語句正在生成以下死鎖: 死鎖1

這個死鎖似乎不是書簽查找死鎖,因為它在同一個索引和相同的objid上。 在非聚集索引中包含pk並沒有帶來任何成功。 我明白了,objid不是recordid,而是索引中的范圍。

查詢(例如更新set act_id = 1,其中act_id = 2)導致此死鎖,具有以下執行計划: 執行計划

有時,同一個死鎖位於另一個只有一個聚簇索引的表上:另一個表上的死鎖相同

有人知道如何避免這種僵局嗎?

這兩個查詢似乎都在更新Clustered Index的B-Tree的相同部分。 這個並發問題有多個答案。 一個是獲得更快的硬件。 另一個是沒有可以改變的主鍵。

我先問你:你是從兩個單獨的查詢更新主鍵嗎?
你有自然鑰匙嗎?
您是否在主/外鍵上設置了級聯更新?
你的其他阻止查詢是什么?

在非聚集索引中包含pk並沒有帶來任何成功

那是因為pk總是存在於所有非聚集索引中,它還會如何進行書簽查找?

謝謝您的回答。 我畫了一張照片以使其更清晰: 在此輸入圖像描述

我們有任務,只有一個動作。 每個動作都可以有多個參數。 我們的應用程序包含多個部署。 每個部署都可以上載這些任務。 在示例中,我有三個部署。 2個插件和一個基本模塊。 2個插件正在等待基本模塊准備就緒,然后兩個模塊在自己的事務中調用基本模塊中的.upload()。 在某一點上,任務將被更新(如果有變化)。 所以在兩個插件中都有任務的變化,這會產生死鎖。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM