Disk Space Requirements for Index DDL Operations

Применяется к:SQL ServerAzure SQL DatabaseAzure, управляемому экземпляру SQL Azure

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

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

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

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

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

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

Заметка

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

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

Пример использования места на диске для индекса

Место на диске журнала транзакций для операций обработки индекса

Оценка размера таблицы

Оценка размера кластеризованного индекса

Оценка размера некластеризованного индекса

Оценка размера кучи

Инструкция CREATE INDEX (Transact-SQL)

ALTER INDEX (Transact-SQL)

DROP INDEX (Transact-SQL)

Указание коэффициента заполнения для индекса

Реорганизация и перестроение индексов