Поделиться через


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

Применимо к:SQL ServerAzure SQL База данныхAzure SQL Управляемый экземплярSQL База данных в Microsoft Fabric

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

Пример вычисления места на диске см. в примере "Дисковое пространство индекса".

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

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

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

Примечание.

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

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