В чем разница между перестройкой индекса в ONLINE и SQL Server?
При восстановлении индекса есть опция ONLINE = OFF и ONLINE = ON. Я знаю, что когда включен режим ONLINE, он делает копию индекса, переключает новые запросы на его использование, а затем восстанавливает исходный индекс, отслеживая изменения с помощью управления версиями для обоих (исправьте меня, если я ошибаюсь).
Но что делает SQL в режиме OFFLINE?
Ответы
Ответ 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.
- Эта блокировка модификации схемы блокирует все другие одновременные обращения к таблице, но она удерживается только в течение очень короткого периода времени, в то время как старый индекс удаляется и статистика обновляется.