首页 > 解决方案 > SQL Server - 单个表上的多个插入导致死锁

问题描述

愿意了解由于多个插入语句而在具有 1 个聚集索引和 1 个非聚集索引的表中发生死锁的情况。

解决方案很奇怪,将 whereignoreDuplicateKey设置为 False,从而解决了问题。这是TRUE错误的,当它是真的时发生了死锁。我读了很多关于索引和锁定的内容,插入可能会导致锁定,但是这个属性是如何解决问题的呢?

场景 - 1 个表,5 个线程并行尝试使用 Spring 批处理(5 个多个分区)插入,1000 是提交间隔。2 个索引 - 1 个主键唯一聚集索引,1 个非聚集唯一索引(带IgnoreDuplicateKey=True)。

桌子上没有触发器。

由于死锁,约 150 次插入失败了 40000 次。死锁失败的数量随着数量的增加而增加。

标签: sqlsql-serverindexingdeadlock

解决方案


推荐阅读