Требования к месту на диске для DDL-операций индекса

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

Операции с индексами, для которых не нужно дополнительное место на диске

Дополнительное место на диске не требуется для следующих операций с индексами.

  • ALTER INDEX REORGANIZE (однако необходимо место для журнала).

  • DROP INDEX (при удалении некластеризованного индекса).

  • DROP INDEX (при автономном удалении кластеризованного индекса без предложения MOVE TO и в отсутствие некластеризованных индексов).

  • CREATE TABLE (PRIMARY KEY или ограничение UNIQUE).

Операции с индексами, требующие дополнительного места на диске

Все остальные DDL-операции индекса требуют дополнительного временного места на диске на время операции, а также постоянного пространства для хранения новых структур индекса. Дополнительные сведения о структурах индексов см. в разделе Архитектура таблиц и структур данных индекса.

При создании новой структуры индекса место на диске требуется как для старой (исходной), так и для новой (целевой) структуры в соответствующих файлах и файловых группах. Место, занимаемое старой структурой, не освобождается до тех пор, пока транзакция создания индекса не будет зафиксирована.

Следующие DDL-операции индекса, создающие новые структуры индексов, требуют дополнительного места на диске:

  • CREATE INDEX;

  • CREATE INDEX WITH DROP_EXISTING;

  • ALTER INDEX REBUILD;

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

  • ALTER TABLE DROP CONSTRAINT (ограничение PRIMARY KEY или UNIQUE) если ограничение основано на кластеризованном индексе;

  • DROP INDEX MOVE TO (применяется только к кластеризованным индексам).

Временное место на диске для сортировки

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

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

Если параметр SORT_IN_TEMPDB имеет значение ON, то наибольший индекс должен помещаться в базе данных tempdb. Хотя этот параметр увеличивает количество временного места на диске, используемого при создании индекса, он может сократить время создания индекса, если база данных tempdb и пользовательская база данных находятся на разных наборах дисков. Дополнительные сведения о сортировке в tempdb см. в разделе База данных tempdb и создание индекса.

Если параметр SORT_IN_TEMPDB имеет значение OFF (по умолчанию), то каждый индекс, включая секционированные, сортируется в собственном месте назначения на диске; необходимо только место для новых структур индексов.

Пример вычисления места на диске см. в разделе Пример места на диске для индекса.

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

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

При создании, перестройке или оперативном удалении кластеризованного индекса создается временный некластеризованный индекс для сопоставления старых закладок с новыми. Если параметр SORT_IN_TEMPDB имеет значение ON, то этот временный индекс создается в базе данных tempdb. Если параметр SORT_IN_TEMPDB имеет значение OFF, то используется та же файловая группа или схема секционирования, что и для целевого индекса. Временный индекс сопоставления содержит одну запись для каждой строки таблицы, содержимое которой представляет собой объединенные старый и новый столбцы закладок, содержащие идентификаторы uniqueifiers и идентификаторы записи, причем в этой таблице есть только по одной копии каждого столбца, который используется в обеих закладках. Дополнительные сведения о фоновых операциях с индексами в оперативном режиме см. в разделе Выполнение операции с индексами в сети.

ПримечаниеПримечание

Для инструкций DROP INDEX нельзя задать параметр SORT_IN_TEMPDB. Временный индекс сопоставления всегда создается в той же файловой группе или схеме секционирования, что и целевой индекс.

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