После поиска в интернете я не смог найти причину
Зачем нам нужно перестраивать и реорганизовать индексы в SQL Server?
что происходит внутри, когда мы перестраиваем и реорганизуем?
Статья на сайте гласит:
Индекс следует перестраивать, когда фрагментация индекса превышает 40%. Индекс должен быть реорганизован, когда фрагментация индекса составляет от 10% до 40%. Процесс перестроения индекса использует больше ресурсов процессора и блокирует ресурсы базы данных. Версия разработки SQL Server и версия Enterprise имеет параметр ONLINE, который можно включить при перестройке индекса. Опция ONLINE будет держать индекс доступным во время перестроения.
Я не мог этого понять, хотя там говорится, что WHEN
для этого, но я хотел бы знать WHY
, нужно ли нам перестраивать и реорганизовывать индексы?
Ответы:
Когда вы выполняете вставки обновлений и удалений, ваши индексы будут фрагментированы как внутри, так и снаружи.
Внутренняя фрагментация - это высокий процент свободного места на страницах индекса, что означает, что SQL Server должен читать больше страниц при сканировании индекса.
Внешняя фрагментация - это когда страницы индекса уже не в порядке, поэтому SQL Server должен выполнять больше работы, особенно в терминах ввода-вывода, чтобы прочитать индекс.
Если ваши индексы становятся слишком фрагментированными, в лучшем случае ваши запросы будут менее эффективными, но в худшем случае SQL Server просто перестанет использовать все индексы вместе, то есть практически все запросы должны будут выполнять сканирование таблицы или сканирования кластеризованного индекса. Это сильно повредит вашей производительности!
Когда вы реорганизуете индекс, SQL Server использует существующие индексные страницы и просто перетасовывает данные по этим возрастам. Это уменьшит внутреннюю фрагментацию, а также может удалить небольшое количество внешней фрагментации. Это более легкая операция, чем восстановление и всегда онлайн.
Когда вы перестраиваете индекс, SQL Server фактически восстанавливает данные индекса и использует новый набор страниц индекса. Это, очевидно, облегчит как внутреннюю, так и внешнюю фрагментацию, но это более трудоемкая операция, которая по умолчанию приводит к отключению индекса, хотя его можно выполнять как оперативную операцию, в зависимости от версии и параметров SQL Server.
Пожалуйста, не ожидайте, что после перестройки будет 0 фрагментация. Если вы не используете подсказку запроса MAXDOP, SQL Server будет распараллеливать операцию перестроения, и чем больше будет задействовано процессоров, тем больше вероятность фрагментации, поскольку каждый процессор или ядро будет перестраивать свой раздел или фрагмент индекса по отдельности, без учета друг друга. Это компромисс между лучшими уровнями фрагментации и временем, затрачиваемым на перестройку индекса. Для почти нулевой фрагментации используйте MAXDOP 1 и отсортируйте результаты в TempDB.
источник
Чтобы удалить фрагментацию, которая вызывает проблемы, такие как медлительность на уровне базы данных / длительные запросы и т. Д.
Чтобы получить подробное представление о фрагментации и о том, как перестроить и реорганизовать индексы (или реорганизовать страницы индексов) для этого, обратитесь по ссылке ниже: https://www.idera.com/productssolutions/sqlserver/sqldefragmanager/what-is-fragmentation
источник