Правила выполнения оперативных операций с индексами
Изменения: 14 апреля 2006 г.
При выполнении оперативных операций с индексами придерживайтесь следующих правил.
- Кластеризованные индексы должны создаваться, перестраиваться или удаляться в автономном режиме, если базовые таблицы содержат типы данных больших объектов: image, ntext, text, varchar(max), nvarchar(max), varbinary(max) и xml.
- Неуникальные некластеризованные индексы могут создаваться в оперативном режиме, если таблица содержит типы данных больших объектов (LOB), но при этом ни один из этих столбцов не участвует в определении индекса ни в качестве ключевого, ни в качестве неключевого столбца. Некластеризованные индексы, определенные со столбцами типов данных больших объектов, должны создаваться и перестраиваться в автономном режиме.
- Индексы локальных временных таблиц не могут создаваться, перестраиваться и удаляться в оперативном режиме. Это ограничение не относится к индексам глобальных временных таблиц.
Примечание. |
---|
Оперативные операции с индексами доступны только в выпуске 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 г. |
|
5 декабря 2005 г. |
|