Я використовував ALTER INDEX REBUILD, щоб видалити фрагментацію індексу. У деяких випадках REBUILD не видаляє цю фрагментацію. Які причини, чому REBUILD не видаляє фрагментацію? Здається, що це відбувається особливо з малими показниками.
Я використовував ALTER INDEX REBUILD, щоб видалити фрагментацію індексу. У деяких випадках REBUILD не видаляє цю фрагментацію. Які причини, чому REBUILD не видаляє фрагментацію? Здається, що це відбувається особливо з малими показниками.
Відповіді:
Якщо індекс дуже малий (я вірю менше 8 сторінок), він буде використовувати змішані розширення. Таким чином, це виглядатиме так, як ніби залишилася фрагментація, оскільки розмір корпусу буде містити сторінки з декількох індексів.
Через це, а також той факт, що в такому невеликому індексі, що фрагментація, як правило, незначна, ви дійсно повинні перебудовувати індекси з певним порогом сторінки. Найкраще застосовувати розроблені фрагментовані індекси, що мають мінімум 1000 сторінок .
Це також може статися з дуже великими індексами.
У мене були декілька індексів на столі з приблизно 700 м рядками, які я не міг дефрагментувати нижче приблизно 30%. Випуску було недостатньо суміжного вільного місця всередині бази даних, щоб послідовно упорядкувати індекс.
Щоб обійти дуже великий індекс, який не дефрагментує, найкращим рішенням є попередньо розмістити нову базу даних і перемістити всі ваші об'єкти до цієї БД, а потім відтворити там свої індекси.
Я боровся з цим колись, і, як JNK, я хоч ця проблема була у вільному просторі та фізичній фрагментації на диску. Однак що ви робите з цим на SSD SAN?
Зараз я з’ясував, що може бути гарною ідеєю включити лише index_level = 0. Так робиться у сценарії Ола Галленгрена.
Ще одне поліпшення - це зробити
REBUILD With (maxdop = 1)
Таким чином ви забезпечуєте максимальне поліпшення.