Требования к месту на диске для 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 и пользовательская база данных находятся на разных наборах дисков.
Если параметр SORT_IN_TEMPDB имеет значение OFF (по умолчанию), то каждый индекс, включая секционированные, сортируется в собственном месте назначения на диске; необходимо только место для новых структур индексов.
Пример вычисления места на диске см. в разделе Пример места на диске для индекса.
Временное место на диске для действий с индексами в режиме в сети
При выполнении действий с индексами в режиме в сети необходимо дополнительное временное место на диске.
При создании, перестройке или удалении вне сети кластеризованного индекса создается временный некластеризованный индекс для сопоставления старых закладок с новыми. Если параметр SORT_IN_TEMPDB имеет значение ON, то этот временный индекс создается в базе данных tempdb. Если параметр SORT_IN_TEMPDB имеет значение OFF, то используется та же файловая группа или схема секционирования, что и для целевого индекса. Временный индекс сопоставления содержит одну запись для каждой строки таблицы, содержимое которой представляет собой объединенные старый и новый столбцы закладок, включая уникальные идентификаторы и идентификаторы записи, причем в этой таблице содержится только по одной копии каждого столбца, который используется в обеих закладках. Дополнительные сведения об операциях с индексами в сети см. в разделе Выполнение операции с индексами в сети.
Примечание |
---|
Для инструкций DROP INDEX нельзя задать параметр SORT_IN_TEMPDB. Временный индекс сопоставления всегда создается в той же файловой группе или схеме секционирования, что и целевой индекс. |
Для действий с индексами в оперативном режиме применяется управление версиями строк, позволяющее изолировать действия с индексами от воздействия изменений, внесенных другими транзакциями. Это исключает необходимость запрашивать общую блокировку уже считанных записей. Для одновременных операций обновления и удаления, выполняемых пользователями во время операций с индексами в сети, требуется место в базе данных tempdb для сохранения записей версий. Дополнительные сведения см. в разделе Выполнение операции с индексами в сети.
Связанные задачи
Пример места на диске для индекса
Место на диске журнала транзакций для операций обработки индекса
Оценка размера кластеризованного индекса
Оценка размера некластеризованного индекса