我们的生产数据库需要在其中一个表上进行每日索引碎片整理。该表有几个索引,其中一个每天会有90%的碎片。
索引位于两个日期字段(开始时间和结束时间)。
我们的开发数据库没有遇到这个问题,尽管这显然有很低的吞吐量。
每天晚上我们都会安排维护任务进行碎片整理,但有时需要在办公时间内运行。
该表目前有250,000条记录,每天增加约500至3000条记录。
关于为什么它如此迅速地分裂的任何想法?
答案 0 :(得分:3)
您可以更改索引的填充因子以减少碎片。
默认填充因子值为0,基本上将其视为100%的填充因子,即没有为插入新索引记录保留额外空间。如果您只在索引末尾添加索引记录(如标识字段),这是理想的,但如果您在中间插入记录则不行。
例如,您可以将填充因子设置为80%,这将在每个索引页面中保留20%的可用空间,以插入新的索引记录。
答案 1 :(得分:1)
思想:
重建索引时,是重新组织还是重建?重建优于25%以上的碎片
如果使用DMO / sqlmaint,则必须说“10”表示填充因子为90
您实际是对所有索引进行碎片整理吗? 例如ALTER INDEX ALL ON Mytable ...
除非您要在90%以上的行中更新这些列,否则无法使用该级别的写入获得90%的碎片...
答案 2 :(得分:0)
新行的数量不应该能够产生这种级别的碎片,但实际上需要更多信息而不仅仅是猜测,主要是表的聚集索引是什么。
还会检查你是否有一个reindex,然后在你的维护或auto_shrink设置中收缩,因为这很容易造成高水平的碎片。