Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

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

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

Ответ 3

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

1) Перестройка индекса OFFLINE выполняется быстрее, чем перезагрузка ONLINE.

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

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

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