列存储聚集索引 - 死锁问题 (SQL Server)
Posted
技术标签:
【中文标题】列存储聚集索引 - 死锁问题 (SQL Server)【英文标题】:Columnstore Clustered Index - Deadlock issue ( SQL Server ) 【发布时间】:2018-09-23 02:56:30 【问题描述】:我正在将数据提取到 SQL Server 中的表 A [使用列存储聚集索引]。 “INSERT BULK”有4个并行线程 写入表,我得到一个死锁错误:
事务(进程 ID)在锁定资源上与另一个进程死锁,并已被选为死锁牺牲品。重新运行事务。
经过研究,我发现聚集列存储索引通常会出现死锁问题,但无法弄清楚解决方案。你能建议吗 可以做什么?
【问题讨论】:
如果将查询的最大并行度 (MAXDOP) 设置为 1,则不会出现此问题。以下链接可能会有所帮助--support.microsoft.com/en-in/help/4057055/… 从 system_health XE 跟踪中发布 deadlock_xml。在 SSMS 对象资源管理器中,Management-->Extended Events-->Sessions-->system_helath-->package0.event_file 并双击查看事件。然后从顶部菜单栏中选择 Extended Events...-->Filters 并指定name = xml_deadlock_report
以查看死锁事件。然后选择一个并复制 xml 值以添加到您的问题中。
我需要从管理员那里得到它。我自己无法访问。
另外请提供 SQL Server 版本(` select @@version`)。
【参考方案1】:
检查您的数据库是否开启了快照隔离级别。对我来说,将快照隔离级别更改为关闭解决了 Columnstore 表上的死锁问题。
【讨论】:
以上是关于列存储聚集索引 - 死锁问题 (SQL Server)的主要内容,如果未能解决你的问题,请参考以下文章
在 SQL Server 2014 中使用聚集列存储索引时,具有大量列的表是不是仍然是反模式?