1

我们的生产数据库需要对其一张表进行每日索引碎片整理。该表有几个索引,其中一个每天会产生 90% 的碎片。

该索引位于两个日期字段(开始时间和结束时间)上。

我们的开发数据库没有遇到这个问题,尽管这显然具有低得多的吞吐量。

每天晚上我们都会安排一项维护任务来进行碎片整理,但这有时需要在办公时间运行。

该表目前有 250,000 条记录,并且每天以大约 500 到 3000 条记录的速度增长。

关于为什么它如此迅速地变得支离破碎的任何想法?

4

3 回答 3

3

您可以更改索引的填充因子以减少碎片。

默认填充因子值是0,基本上被视为100%的填充因子,即没有为插入新的索引记录保留额外的空间。如果您只在索引末尾添加索引记录(如标识字段),这是理想的,但如果您在中间插入记录,则不是。

例如,您可以将填充因子设置为 80%,这将在每个索引页中保留 20% 的可用空间用于插入新的索引记录。

于 2009-11-10T10:03:27.960 回答
1

想法:

  • 重建索引时,是重新组织还是重建?重建优于 25% ish 碎片

  • 如果使用 DMO/sqlmaint,对于 90 的填充因子,您必须说“10”

  • 你实际上是在整理所有索引,例如 ALTER INDEX ALL ON Mytable ...

  • 除非您在 90% 的行上更新这些列,否则您无法使用该级别的写入获得 90% 的碎片......

于 2009-11-10T13:07:41.870 回答
0

新行的数量应该不能产生那种程度的碎片,但确实需要更多的信息来不仅仅是猜测,主要是表的聚集索引是什么。

还将检查您是否在维护或 auto_shrink 设置后进行了重新索引,因为这很容易导致高度碎片化。

于 2009-11-10T10:06:32.173 回答