В чем разница между перестройкой индекса OFFLINE и ONLINE в SQL Server?

При перестроении индекса есть опция ONLINE=OFF и ONLINE=ON. Я знаю, что, когда включен режим ONLINE, он создает копию индекса, переключает новые запросы на его использование, а затем перестраивает исходный индекс, отслеживая изменения с помощью управления версиями в обоих случаях (исправьте меня, если я ошибаюсь).

Но что делает SQL в автономном режиме?

3 ответа

Решение

В режиме ONLINE новый индекс создается, в то время как старый индекс доступен для чтения и записи. любое обновление старого индекса также будет применено к новому индексу. Столбец антивещества используется для отслеживания возможных конфликтов между обновлениями и перестройкой (т. Е. Удаление строки, которая еще не была скопирована). См. Операции с индексами в Интернете. Когда процесс завершен, таблица на короткое время блокируется, и новый индекс заменяет старый индекс. Если индекс содержит столбцы больших объектов, операции ONLINE не поддерживаются в SQL Server 2005/2008/R2.

В режиме OFFLINE таблица заблокирована заранее для любого чтения или записи, а затем новый индекс создается из старого индекса, удерживая блокировку таблицы. Во время перестроения индекса операции чтения или записи в таблицу запрещены. Только когда операция завершена, блокировка таблицы освобождается, и чтение и запись снова разрешаются.

Обратите внимание, что в SQL Server 2012 ограничение на большие объекты было снято, см. Операции с индексами в сети для индексов, содержащих столбцы больших объектов.

Основными отличиями являются:

1) Перестроение индекса OFFLINE происходит быстрее, чем перестроение ONLINE.

2) Дополнительное дисковое пространство, необходимое для перестроения индекса SQL Server.

3) Блокировки SQL Server, полученные с помощью перестроений индексов SQL Server.

  • Эта блокировка модификации схемы блокирует весь другой параллельный доступ к таблице, но она удерживается только в течение очень короткого периода времени, пока старый индекс удаляется и статистика обновляется.

Перестройка индексов в режиме онлайн менее навязчива, когда дело доходит до блокировки таблиц. Автономные перестройки вызывают сильную блокировку таблиц, что может вызвать серьезные проблемы с блокировкой для объектов, которые пытаются получить доступ к базе данных во время перестройки.

"Табличные блокировки применяются на время операции индекса [во время автономной перестройки]. Автономная операция индекса, которая создает, перестраивает или удаляет кластерный, пространственный или XML-индекс, или перестраивает или удаляет некластеризованный индекс, получает схему модификационная (Sch-M) блокировка таблицы. Это предотвращает доступ всех пользователей к базовой таблице на время выполнения операции. Операция автономного индекса, которая создает некластеризованный индекс, получает общую блокировку (S) для таблицы. Это предотвращает обновления к базовой таблице, но допускает операции чтения, такие как операторы SELECT. "

http://msdn.microsoft.com/en-us/library/ms188388(v=sql.110).aspx

Кроме того, перестройка индекса в сети - это функция только для версии предприятия (или разработчика).

Другие вопросы по тегам