Требования к месту на диске для 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. Дополнительные сведения см. в разделах Выполнение фоновых операций с индексами и Основные сведения об уровнях изоляции на основе управления версиями строк.
См. также