Я использовал ALTER INDEX REBUILD для удаления фрагментации индекса. В некоторых случаях REBUILD, похоже, не удаляет эту фрагментацию. По каким причинам REBUILD не удаляет фрагментацию? Похоже, это происходит особенно с небольшими показателями.
Я использовал ALTER INDEX REBUILD для удаления фрагментации индекса. В некоторых случаях REBUILD, похоже, не удаляет эту фрагментацию. По каким причинам REBUILD не удаляет фрагментацию? Похоже, это происходит особенно с небольшими показателями.
Ответы:
Если индекс очень маленький (я считаю, менее 8 страниц), он будет использовать смешанные экстенты. Следовательно, это будет выглядеть так, как будто осталась фрагментация, так как экстент размещения будет содержать страницы из нескольких индексов.
Из-за этого, а также из-за того факта, что в таком маленьком индексе, что фрагментация обычно пренебрежимо мала, вам действительно нужно перестраивать индексы только с определенным порогом страницы. Рекомендуется перестраивать фрагментированные индексы размером не менее 1000 страниц .
Это также может произойти с очень большими индексами.
У меня было несколько индексов в таблице с примерно 700-метровыми строками, которые я не мог дефрагментировать ниже примерно на 30%. Проблема заключалась в том, что в базе данных не было непрерывного свободного пространства для последовательного упорядочения индекса.
Чтобы обойти очень большой индекс, который не будет дефрагментировать, лучшее решение состоит в том, чтобы предварительно изменить размер новой базы данных и переместить все ваши объекты в эту БД, а затем воссоздать ваши индексы там.
Я боролся с этим некоторое время и, как и JNK, думал, что проблема в том, что свободное пространство и физическая фрагментация на диске остаются. Тем не менее, что вы делаете по этому поводу на SSD SAN?
Теперь я обнаружил, что хорошей идеей может быть включение только index_level = 0. Вот как это делается в сценарии Олы Хелленгрен.
Еще одно улучшение, чтобы сделать
REBUILD With (maxdop = 1)
Таким образом вы обеспечите максимальное улучшение.