即使使用 fillfactor,索引碎片也会迅速增长

Index fragmentation growing rapidly even using fillfactor

我正在使用 SQL Server 2012,这几天我注意到一些索引的碎片增长得非常快。我阅读了不同的文章并应用了填充因子。

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

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

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

提前致谢。

导致索引碎片的原因有很多..其中一些在下面

1.Insert 和更新操作导致页面拆分
2.Delete 操作
3.Initial 从混合盘区分配页面
4.Large 行大小

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

因此,根据您的填充因子设置,sql 服务器会在重建索引时留下一些 space,这仅在第一种情况下有帮助,这也取决于您的工作量

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

您还可以使用 Perfmon counters/extended 事件和 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