В чем разница между перестройкой индекса 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
Кроме того, перестройка индекса в сети - это функция только для версии предприятия (или разработчика).