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

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

Наличие свободного места на диске особенно важно при создании, перестройке или удалении индексов. Недостаток места на диске может понизить производительность и даже вызвать ошибку операции с индексом. В этом разделе приведены общие сведения о том, как определить объем места на диске, необходимый для 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 и идентификаторы записи, причем в этой таблице есть только по одной копии каждого столбца, который используется в обеих закладках. Дополнительные сведения об операциях над индексами в оперативном режиме см. в разделе Оперативное выполнение операций над индексом.

ms179542.note(ru-ru,SQL.90).gifПримечание.
Для инструкций DROP INDEX нельзя задать параметр SORT_IN_TEMPDB. Временный индекс сопоставления всегда создается в той же файловой группе или схеме секционирования, что и целевой индекс.

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

См. также

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

Создание индексов (компонент Database Engine)
Оценка размера некластеризованного индекса
Оценка размера кластеризованного индекса
Коэффициент заполнения
Помещение индексов в файловые группы
Реорганизация и перестроение индексов
Место на диске журнала транзакций для операций обработки индекса

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

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

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

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

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

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

14 апреля 2006 г.

Измененное содержимое.
  • Операция CREATE TABLE (ограничение PRIMARY KEY или UNIQUE) перемещена в список операций, не требующих дополнительного дискового пространства.
  • Разъяснено, в каких случаях для операции ALTER TABLE DROP CONSTRAINT требуется дополнительное дисковое пространство.