我們在持有訂單履行的事務表中使用集羣列存儲索引。該表由不同的會話定期更新。但是,每個會話都是專門爲了訂購作業號而設計的,所以他們並不試圖同時更新同一行。但是,由於會議之間的情況不同,我們正面臨死鎖問題。發生在集羣列存儲索引中的死鎖
- 行組鎖定&頁鎖
- 行組鎖定&行組鎖定
這不是特定於存儲的過程。這是由於多個存儲過程逐一更新此表,作爲訂單履行的一部分。
表的示例模式很簡單:
CREATE TABLE OrderFulfillments
(
OrderJobNumber INT NOT NULL,
FulfilledIndividualID BIGINT NOT NULL,
IsIndividualSuppressed BIT NOT NULL,
SuppressionReason VARCHAR(100) NULL
)
我已經給定的樣本僵局圖,供大家參考。請讓我知道,我可以採取什麼方法來避免這種僵局。我們需要在此表中使用聚集的Columnstore索引,因爲我們正在執行聚合操作以查看個人已經實現了多少次。沒有列存儲索引,它可能會變慢。
你需要問自己什麼查詢導致了阻塞。如果更新是真正的順序,那麼答案不是更新,而是其他過程,比如說表上的select語句。從sys.DM_exec_requests中找出last_wait_type是什麼 –
是的,select語句仍然使用某種級別的鎖定。 –
謝謝克利夫頓。我已在每個選擇查詢上應用NOLOCK。只有UPDATE,我們沒有NOLOCK來避免數據損壞。所以,選擇是不是這裏的問題。鎖定升級到Rowgroup級別導致死鎖。我會用等待類型信息 –