填充因子和索引

时间:2013-09-23 18:05:46

标签: sql-server indexing

我有一种困惑。如果我将填充因子设置为50%,那么sql引擎将留下一半的空间用于未来增长,因此数据将存储在最多4KB(大约)的日期页面中,因为页面最大大小为8KB。填充因子也仅适用于重建索引。请清楚我对上述情况的疑问。任何帮助将不胜感激。

谢谢

1 个答案:

答案 0 :(得分:1)

DBA和开发人员经常读到,降低fillfactor可以通过减少页面拆分来提高性能。也许他们正试图解决性能问题,或者他们可能会感到偏执。它们要么在某些索引上降低fillfactor,要么对所有索引应用fillfactor更改。

这是独家新闻:100%的默认填充因子并不总是好的。如果我将我的页面填满边缘,然后返回并需要在该页面上插入一行,则不适合。为了使数据适合并保留索引的逻辑结构,SQL Server将不得不做一堆复杂的事情(“坏”类型的页面拆分),包括:

1)添加新页面。

2)将大约一半的数据移动到新页面。

3)标记在旧页面上移动的数据,使其无效。

4)更新现有页面上的页面链接指针以指向新页面 是的,这是很多工作。

它会生成日志记录并导致额外的IO。是的,如果你经常发生这种情况,你可能需要稍微降低该指数中的fillfactor,以减少它的发生频率。

设置填充物的最佳实践

以下是关于如何安全地设置fillfactor的一些简单建议:

1)不要为fillfactor设置系统范围的值。这不太可能有助于你的表现而不是伤害。

2)获得一个良好的索引维护解决方案,该解决方案检查索引碎片并仅对碎片相当严重的索引起作用。让解决方案记录到表中。查找经常碎片化的索引。考虑使用计划的更改来重建索引,逐步降低这些单个索引上的fillfactor。当你第一次降低fillfactor时,考虑转到95并在一周或两次维护再次运行后重新评估索引。 (根据您的SQL Server版本和版本,可能需要脱机完成重建。重新组织不能用于设置新的fillfactor。)

这第二个选项可能听起来很挑剔,但在大多数环境中,只需几分钟即可确定需要进行更改的位置。你可以每月做一次。这是值得的 - 因为没有人希望他们的数据库性能变慢,并且意识到他们通过在内存中留下许多千兆字节的空间不必要地耗尽而导致额外的IO。