Почему индекс 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.