В чем разница между перестройкой индекса OFFLINE и ONLINE в SQL Server? - PullRequest
48 голосов
/ 10 июня 2011

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

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

Ответы [ 3 ]

63 голосов
/ 10 июня 2011

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

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

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

6 голосов
/ 10 июня 2011

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

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

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

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

4 голосов
/ 15 марта 2017

Основные различия:

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

2) При перестроении индекса SQL Server в режиме онлайн требуется дополнительное дисковое пространство.

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

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