我们在持有订单履行的事务表中使用集群列存储索引。该表由不同的会话定期更新。但是,每个会话都是专门为了订购作业号而设计的,所以他们并不试图同时更新同一行。但是,由于会议之间的情况不同,我们正面临死锁问题。发生在集群列存储索引中的死锁
- 行组锁定&页锁
- 行组锁定&行组锁定
这不是特定于存储的过程。这是由于多个存储过程逐一更新此表,作为订单履行的一部分。
表的示例模式很简单:
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级别导致死锁。我会用等待类型信息 –