Чому індекс REBUILD не зменшує фрагментацію індексу?


30

Я використовував ALTER INDEX REBUILD, щоб видалити фрагментацію індексу. У деяких випадках REBUILD не видаляє цю фрагментацію. Які причини, чому REBUILD не видаляє фрагментацію? Здається, що це відбувається особливо з малими показниками.


Відповіді:


39

Якщо індекс дуже малий (я вірю менше 8 сторінок), він буде використовувати змішані розширення. Таким чином, це виглядатиме так, як ніби залишилася фрагментація, оскільки розмір корпусу буде містити сторінки з декількох індексів.

Через це, а також той факт, що в такому невеликому індексі, що фрагментація, як правило, незначна, ви дійсно повинні перебудовувати індекси з певним порогом сторінки. Найкраще застосовувати розроблені фрагментовані індекси, що мають мінімум 1000 сторінок .


34

Це також може статися з дуже великими індексами.

У мене були декілька індексів на столі з приблизно 700 м рядками, які я не міг дефрагментувати нижче приблизно 30%. Випуску було недостатньо суміжного вільного місця всередині бази даних, щоб послідовно упорядкувати індекс.

Щоб обійти дуже великий індекс, який не дефрагментує, найкращим рішенням є попередньо розмістити нову базу даних і перемістити всі ваші об'єкти до цієї БД, а потім відтворити там свої індекси.


1

Я боровся з цим колись, і, як JNK, я хоч ця проблема була у вільному просторі та фізичній фрагментації на диску. Однак що ви робите з цим на SSD SAN?

Зараз я з’ясував, що може бути гарною ідеєю включити лише index_level = 0. Так робиться у сценарії Ола Галленгрена.

Ще одне поліпшення - це зробити

 REBUILD With (maxdop = 1)

Таким чином ви забезпечуєте максимальне поліпшення.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.