web-dev-qa-db-ja.com

インデックスの再構築でインデックスの断片化が減少しないのはなぜですか?

ALTER INDEX REBUILDを使用して、インデックスの断片化を削除しました。場合によっては、REBUILDはこの断片化を削除しないようです。 REBUILDが断片化を削除しない理由は何ですか?これは、特に小さなインデックスで発生するようです。

30
jrara

インデックスが非常に小さい場合(8ページ未満だと思います)、混合エクステントを使用します。したがって、収容範囲には複数のインデックスのページが含まれるため、断片化が残っているように見えます。

このため、また、通常、断片化が無視できるほどの小さなインデックスでは、特定のページしきい値でのみインデックスを再構築する必要があります。 1000ページ以上の断片化されたインデックスを再構築することをお勧めします。

40
Thomas Stringer

これは、非常に大きいインデックスでも発生する可能性があります。

約700m行のテーブルにいくつかのインデックスがあり、約30%未満でデフラグできませんでした。この問題は、インデックスを連続して配置するのに十分なデータベース内の連続した空き領域ではありませんでした。

最適化されない非常に大きなインデックスを回避するには、新しいデータベースのサイズを事前に設定し、すべてのオブジェクトをそのDBに移動して、そこにインデックスを再作成するのが最善のソリューションです。

34
JNK

私はしばらくの間これに苦労してきましたが、問題はディスクの空き領域と物理的な断片化が続いていることですが、JNK Iと同じです。しかし、SSD SANでそれをどうしますか?

Index_level = 0のみを含めるのが良い考えであることがわかりました。これはOla Hallengrenのスクリプトでどのように行われるかです。

別の改善は行うことです

 REBUILD With (maxdop = 1)

このようにして、最大限の改善を確実にします。

1
vikjon0