聚集索引引起数据库很容易死锁

来源:互联网 发布:ps4 网络设置 编辑:程序博客网 时间:2024/05/20 11:52

数据库很容易死锁,我后来发现是聚集索引引起的,索引填充因子是90,后来把聚集索引去掉,问题就解决了,但是有些人不明白聚集索引为什么会引起死锁??


首先,填充因子设置得不对。

聚集索引代表了表中记录的存储顺序,所以每次数据的变化,都可能导致表中的数据按照聚集索引重新调整顺序

而填充因子设置为90,这是偏向于减少索引空间占用的做法,这样的做法导致为了减少索引的空间占用,使数据页的空闲空间很小
在向一个已满的索引页添加某个新行时,SQL Server 把大约一半的行移到新页中以便为新行腾出空间。这种重组称为页拆分。页拆分会降低性能并使表中的数据存储产生碎片
因为你这样的填充因子设置,导致数据页空闲空间很小,所以页拆分经常发生,这样数据处理性能低,当然就很容易锁表了


删除聚集索引后,不存在调整数据顺序的问题,也就不产生页拆分的问题,因此就解决了死锁的问题.


正确的填充因子应该是偏小,保持默认的0或者10这样的较小值,这样产生的结果是索引占用的空间大,但因为数据页的空闲多,所以页拆分的机率小,也就在很大程度上避免了死锁
同时,在查询处理上,如果经常在聚集索引列上做条件查询,这样的效率是很高的


原创粉丝点击