Правила выполнения оперативных операций с индексами

Изменения: 14 апреля 2006 г.

При выполнении оперативных операций с индексами придерживайтесь следующих правил.

  • Кластеризованные индексы должны создаваться, перестраиваться или удаляться в автономном режиме, если базовые таблицы содержат типы данных больших объектов: image, ntext, text, varchar(max), nvarchar(max), varbinary(max) и xml.
  • Неуникальные некластеризованные индексы могут создаваться в оперативном режиме, если таблица содержит типы данных больших объектов (LOB), но при этом ни один из этих столбцов не участвует в определении индекса ни в качестве ключевого, ни в качестве неключевого столбца. Некластеризованные индексы, определенные со столбцами типов данных больших объектов, должны создаваться и перестраиваться в автономном режиме.
  • Индексы локальных временных таблиц не могут создаваться, перестраиваться и удаляться в оперативном режиме. Это ограничение не относится к индексам глобальных временных таблиц.
ms190981.note(ru-ru,SQL.90).gifПримечание.
Оперативные операции с индексами доступны только в выпуске Microsoft SQL Server 2005 Enterprise Edition.

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

Оперативные операции с индексами Исключенные индексы Прочие ограничения

ALTER INDEX REBUILD

Отключенный кластеризованный индекс или отключенное индексированное представление

XML-индекс

Индекс локальной временной таблицы

Указание ключевого слова ALL может привести к ошибке выполнения операции, если таблица содержит исключенный индекс.

На перестроение отключенных индексов налагаются дополнительные ограничения. Дополнительные сведения см. в разделе Правила отключения индексов.

CREATE INDEX

XML-индекс

Начальный уникальный кластеризованный индекс представления

Индекс локальной временной таблицы

 

CREATE INDEX WITH DROP_EXISTING

Отключенный кластеризованный индекс или отключенное индексированное представление

Индекс локальной временной таблицы

XML-индекс

 

DROP INDEX

Отключенный индекс

XML-индекс

Некластеризованный индекс

Индекс локальной временной таблицы

В одной инструкции не может быть указано несколько индексов.

ALTER TABLE ADD CONSTRAINT (PRIMARY KEY или ограничение UNIQUE)

Индекс локальной временной таблицы

Кластеризованный индекс

Допускается только одно вложенное предложение за раз. Например: нельзя добавлять и удалять ограничения PRIMARY KEY и UNIQUE в одной и той же инструкции ALTER TABLE.

ALTER TABLE DROP CONSTRAINT (PRIMARY KEY или ограничение UNIQUE)

Кластеризованный индекс

 

Базовая таблица не может быть изменена, усечена или удалена, пока не завершилась оперативная операция с индексом.

Настройка параметра ONLINE (ON или OFF), указанная при создании или удалении кластеризованного индекса, относится ко всем перестраиваемым некластеризованным индексам. Например: если кластеризованный индекс построен в оперативном режиме с помощью инструкции CREATE INDEX WITH DROP_EXISTING, ONLINE=ON, все связанные с ним некластеризованные индексы также повторно создаются в оперативном режиме.

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

С небольшой вероятностью оперативная операция с индексом может вызвать взаимоблокировку при работе с базой данных, вызванную работой пользователя или приложения. В этих редких случаях компонент SQL Server 2005 Database Engine определит жертвой взаимоблокировки активность пользователя или приложения.

Можно выполнять одновременные оперативные DLL-операции с индексами одной таблицы или представления только при создании нескольких некластеризованных индексов либо при реорганизации некластеризованных индексов. Все остальные попытки выполнения оперативных операций с индексами завершаются ошибкой. Например: нельзя в оперативном режиме создавать новый индекс во время перестроения существующего индекса для этой же таблицы.

Рекомендации по месту на диске

В общем случае требования к свободному месту на диске при работе с индексами в оперативном и в автономном режиме одинаковы. Исключением является дополнительное место, необходимое для временного сопоставления индекса. Этот временный индекс применяется в оперативных операциях с индексами при создании, перестроении или удалении кластеризованных индексов. Удаление кластеризованного индекса в оперативном режиме требует столько же места, сколько и его создание в оперативном режиме. Дополнительные сведения см. в разделе Требования к месту на диске для DDL-операций индекса.

Вопросы производительности

Хотя оперативные операции с индексами допускают одновременную работу пользователей, в этом случае они выполняются тем дольше, чем интенсивнее происходит обновление данных. Обычно оперативные операции с индексами выполняются медленнее, чем аналогичные автономные операции, независимо от текущей интенсивности обновления данных.

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

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

На многопроцессорных компьютерах под управлением выпуска SQL Server 2005 Enterprise Edition инструкции индексирования могут потребовать дополнительных ЦП для выполнения операций просмотра и сортировки, как и любые другие запросы. Для управления количеством ЦП, выделенных для выполнения конкретных оперативных операций с индексами, можно воспользоваться параметром индексирования MAXDOP. В этом случае можно распределить потребляемые операцией с индексом ресурсы таким образом, чтобы не пострадали одновременно работающие пользователи. Дополнительные сведения см. в разделе Настройка параллельных индексных операций.

Поскольку на финальной фазе удерживаются блокировки S-lock и Sch-M, будьте внимательны при выполнении оперативных операций с индексами внутри явно объявленных пользовательских транзакций (например: в блоке BEGIN TRANSACTION...COMMIT), поскольку в этом случае блокировка будет удерживаться до окончания транзакции, мешая одновременной работе пользователей.

Вопросы, касающиеся журнала транзакций

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

См. также

Основные понятия

Об оперативных действиях над индексом
Оперативное выполнение операций над индексом

Другие ресурсы

ALTER INDEX (Transact-SQL)
CREATE INDEX (Transact-SQL)

Справка и поддержка

Получение помощи по SQL Server 2005

Журнал изменений

Версия Журнал

14 апреля 2006 г.

Обновленное содержимое.
  • Уникальный некластеризованный индекс удален из списка исключенных индексов. Это изменение распространяется на версии SQL Server 2005 с пакетом обновления 1 и более поздние.

5 декабря 2005 г.

Новое содержимое.
  • Уникальный некластеризованный индекс добавлен в список исключенных индексов для следующих инструкций: CREATE INDEX, CREATE INDEX WITH DROP_EXISTING и ALTER TABLE ADD CONSTRAINT (PRIMARY KEY или UNIQUE).