即使使用fillfactor,索引碎片也在快速增长

时间:2017-07-15 13:26:57

标签: sql-server indexing database-fragmentation

我正在使用SQL Server 2012,从几天开始我注意到某些索引的碎片化速度非常快。我读过不同的文章并应用填充因子。

首先,我将填充因子更改为95并重建,在一天碎片后约为50%。所以我将填充因子减少到90然后再减少80,但是在一天之后,碎片再次达到50%。

我需要一些帮助来找出增加碎片的原因和修复它的解决方案。

仅供参考,我在索引级别应用填充因子,只有4-5个索引出现此问题我已将填充因子应用于其他索引以及它们正常工作。

提前致谢。

1 个答案:

答案 0 :(得分:2)

导致索引碎片的因素有很多......其中一些是在

之下

1.插入和更新操作导致页面拆分
2.删除操作
3.来自混合范围的页面的初始分配
4.行大小

SQL Server only uses fillfactor when you’re creating, rebuilding, or reorganizing an index,因此,即使您指定填充因子为70,您仍可能会获得页面拆分..并且进一步的索引碎片是任何OLTP环境的“预期”和“不可避免”特征。

因此,使用填充因子设置,sql server会在重建索引时留出一些空间,这仅在第一种情况下有用,这也会受到工作量的影响

所以我建议不要担心碎片很多,除非你的工作量做了很多范围扫描。下面是一些可以帮助你的链接

此外,您可以使用Perfmon计数器/扩展事件和lso using transaction log

跟踪Pagesplits / deletes,它们是碎片化的一些原因

https://dba.stackexchange.com/questions/115943/index-fragmentation-am-i-interpreting-the-results-correctly

https://www.brentozar.com/archive/2012/08/sql-server-index-fragmentation/

参考文献:
Notes - SQL Server Index Fragmentation, Types and Solutions