Пример места на диске для индексаIndex Disk Space Example

Применимо к:Applies to: даSQL ServerSQL Server (все поддерживаемые версии) yesSQL ServerSQL Server (all supported versions) Применимо к:Applies to: даSQL ServerSQL Server (все поддерживаемые версии) yesSQL ServerSQL Server (all supported versions)

Каждый раз, когда создается, перестраивается или удаляется индекс, требуется место на диске как для старых (исходных), так и для новых (целевых) структур в соответствующих файлах и файловых группах.Whenever an index is created, rebuilt, or dropped, disk space for both the old (source) and new (target) structures is required in their appropriate files and filegroups. Место, занимаемое старой структурой, не освобождается до тех пор, пока транзакция создания индекса не будет зафиксирована.The old structure is not deallocated until the index creation transaction commits. Может также потребоваться дополнительное временное место на диске для операций сортировки.Additional temporary disk space for sorting operations may also be needed. Дополнительные сведения см. в статье Disk Space Requirements for Index DDL Operations.For more information, see Disk Space Requirements for Index DDL Operations.

В этом примере будут определены потребности в месте на диске для создания кластеризованного индекса.In this example, disk space requirements to create a clustered index are determined.

Предположим, что до создания кластеризованного индекса выполнены следующие условия.Assume the following conditions are true before creating the clustered index:

  • Существующая таблица (куча) содержит 1 миллион строк.The existing table (heap) contains 1 million rows. Длина каждой строки составляет 200 байт.Each row is 200 bytes long.

  • Некластеризованный индекс А содержит 1 миллион строк.Nonclustered index A contains 1 million rows. Длина каждой строки составляет 50 байт.Each row is 50 bytes long.

  • Некластеризованный индекс В содержит 1 миллион строк.Nonclustered index B contains 1 million rows. Длина каждой строки составляет 80 байт.Each row is 80 bytes long.

  • Параметру «index create memory» присвоено значение 2 МБ.The index create memory option is set to 2 MB.

  • Для всех существующих и новых индексов используется значение коэффициента заполнения, равное 80.A fill factor value of 80 is used for all existing and new indexes. Это означает, что страницы заполнены на 80%.This means the pages are 80 percent full.

    Примечание

    В результате создания кластеризованного индекса два некластеризованных индекса должны быть перестроены, чтобы заменить индикатор строк на новый ключ кластеризованного индекса.As a result of creating a clustered index, the two nonclustered indexes must be rebuilt to replace the row indicator with the new clustered index key.

Вычисление места на диске для операций с индексами вне сетиDisk Space Calculations for an Offline Index Operation

Следующие шаги служат для вычисления как временного места на диске для использования во время индексной операции, так и постоянного места для хранения новых индексов.In the following steps, both temporary disk space to be used during the index operation and permanent disk space to store the new indexes are calculated. Приведенные вычисления приблизительны: результаты округляются и учитывают только размер конечного уровня индекса.The calculations shown are approximate; results are rounded up and consider only the size of index leaf level. Тильда (~) используется, чтобы отметить приблизительные вычисления.The tilde (~) is used to indicate approximate calculations.

  1. Определите размер исходных структур.Determine the size of the source structures.

    Куча: 1 миллион * 200 байт ~ 200 МБHeap: 1 million * 200 bytes ~ 200 MB

    Некластеризованный индекс A: 1 миллион * 50 байт / 80 % ~ 63 МБNonclustered index A: 1 million * 50 bytes / 80% ~ 63 MB

    Некластеризованный индекс B: 1 миллион * 80 байт / 80 % ~ 100 МБNonclustered index B: 1 million * 80 bytes / 80% ~ 100 MB

    Общий размер существующих структур: 363 МБTotal size of existing structures: 363 MB

  2. Определите размер целевых структур индексов.Determine the size of the target index structures. Предположим, что новый кластеризованный ключ имеет длину 24 байта, включая уникальный идентификатор.Assume that the new clustered key is 24 bytes long including a uniqueifier. Признак строк (длиной 8 байт) в обоих некластеризованных индексах будет заменен этим кластеризованным ключом.The row indicator (8 bytes long) in both nonclustered indexes will be replaced by this clustered key.

    Кластеризованный индекс: 1 миллион * 200 байт / 80 % ~ 250 МБClustered index: 1 million * 200 bytes / 80% ~ 250 MB

    Некластеризованный индекс A: 1 миллион * (50 – 8 + 24) байт / 80 % ~ 83 МБNonclustered index A: 1 million * (50 - 8 + 24) bytes / 80% ~ 83 MB

    Некластеризованный индекс B: 1 миллион * (80 – 8 + 24) байт / 80 % ~ 120 МБNonclustered index B: 1 million * (80 - 8 + 24) bytes / 80% ~ 120 MB

    Общий размер новых структур: 453 МБTotal size of new structures: 453 MB

    Полное место на диске, необходимое для поддержки и исходных, и целевых структур в процессе операции с индексами, составляет 816 МБ (363 + 453).Total disk space required to support both the source and target structures for the duration of the index operation is 816 MB (363 + 453). Место, выделенное под исходные структуры, будет освобождено после фиксации операции с индексами.The space currently allocated to the source structures will be deallocated after the index operation is committed.

  3. Определите дополнительное временное место на диске для сортировки.Determine additional temporary disk space for sorting.

    Потребность в дисковом пространстве показана для сортировки в базе данных tempdb (с параметром SORT_IN_TEMPDB, установленным в ON) и сортировки в целевом местоположении (с параметром SORT_IN_TEMPDB, установленным в OFF).Space requirements are shown for sorting in tempdb (with SORT_IN_TEMPDB set to ON) and sorting in the target location (with SORT_IN_TEMPDB set to OFF).

    1. Когда параметр SORT_IN_TEMPDB установлен в ON, база данных tempdb должна иметь достаточно места на диске, чтобы хранить наибольший индекс (1 миллион * 200 байт ~ 200 МБ).When SORT_IN_TEMPDB is set to ON, tempdb must have sufficient disk space to hold the largest index (1 million * 200 bytes ~ 200 MB). Коэффициент заполнения в операции сортировки не учитывается.Fill factor is not considered in the sorting operation.

      Дополнительное место на диске (в расположении базы данных tempdb ), равное значению параметра index create memory = 2 МБ.Additional disk space (in the tempdb location) equal to the Configure the index create memory Server Configuration Option value = 2 MB.

      Общий размер временного места на диске с параметром SORT_IN_TEMPDB, установленным в ON ~ 202 МБ.Total size of temporary disk space with SORT_IN_TEMPDB set to ON ~ 202 MB.

    2. Когда параметру SORT_IN_TEMPDB присвоено значение OFF (значение по умолчанию), 250 МБ места на диске, уже предназначенные для нового индекса на шаге 2, используются для сортировки.When SORT_IN_TEMPDB is set to OFF (default), the 250 MB of disk space already considered for the new index in step 2 is used for sorting.

      Дополнительное место на диске (на целевом диске), равное значению параметра Настройка параметра конфигурации сервера index create memory = 2 МБ.Additional disk space (in the target location) equal to the Configure the index create memory Server Configuration Option value = 2 MB.

      Общий размер временного места на диске с параметром SORT_IN_TEMPDB, установленным в OFF = 2 МБ.Total size of temporary disk space with SORT_IN_TEMPDB set to OFF = 2 MB.

При использовании базы данных tempdbпотребуется всего 1018 МБ (816 + 202), чтобы создать кластеризованные и некластеризованные индексы.Using tempdb, a total of 1018 MB (816 + 202) would be needed to create the clustered and nonclustered indexes. Хотя использование базы данных tempdb увеличивает количество временного места на диске, которое используется для создания индекса, оно может уменьшить время создания индекса, если база данных tempdb и пользовательская база данных находятся на разных наборах дисков.Although using tempdb increases the amount of temporary disk space used to create an index, it may reduce the time that is required to create an index when tempdb is on a different set of disks than the user database. Дополнительные сведения об использовании tempdbсм. в разделе Параметр SORT_IN_TEMPDB для индексов.For more information about using tempdb, see SORT_IN_TEMPDB Option For Indexes.

Без использования базы данных tempdbдля создания кластеризованных и некластеризованных индексов потребуется всего 818 МБ (2 + 816).Without using tempdb, a total of 818 MB (816+ 2) would be needed to create the clustered and nonclustered indexes.

Вычисление места на диске для операций с кластеризованными индексами в сетиDisk Space Calculations for an Online Clustered Index Operation

Когда кластеризованный индекс создается, удаляется или перестраивается в режиме в сети, требуется дополнительное место на диске для построения и поддержания временного индекса сопоставления.When you create, drop, or rebuild a clustered index online, additional disk space is required to build and maintain a temporary mapping index. Этот временный индекс сопоставления содержит по одной записи для каждой строки таблицы и состоит из объединения старых и новых столбцов закладок.This temporary mapping index contains one record for each row in the table, and its contents are the union of the old and new bookmark columns.

Чтобы вычислить место на диске, необходимое для операций с кластеризованными индексами в сети, выполните шаги, указанные для действий вне сети, и добавьте к этим результатам результаты следующего шага.To calculate the disk space needed for an online clustered index operation, follow the steps shown for an offline index operation and add those results to the results of the following step.

  • Определите место для временного индекса сопоставления.Determine space for the temporary mapping index.

    В этом примере старая закладка — это идентификатор строки (RID) кучи (8 байт), а новая — ключ кластеризации (24 байта, включая uniqueifier).In this example, the old bookmark is the row ID (RID) of the heap (8 bytes) and the new bookmark is the clustering key (24 bytes including a uniqueifier). У старой и новой закладок нет пересекающихся столбцов.There are no overlapping columns between the old and new bookmarks.

    Размер временного индекса сопоставления = 1 миллион * (8 + 24 байта) / 80% ~ 40 МБ.Temporary mapping index size = 1 million * (8 bytes + 24 bytes) / 80% ~ 40 MB.

    Такой объем надо прибавить к месту, нужному в целевом расположении, если параметр SORT_IN_TEMPDB установлен в OFF, или к базе данных tempdb , если параметр SORT_IN_TEMPDB установлен в ON.This disk space must be added to the required disk space in the target location if SORT_IN_TEMPDB is set to OFF, or to tempdb if SORT_IN_TEMPDB is set to ON.

Дополнительные сведения о временном индексе сопоставления см. в статье Disk Space Requirements for Index DDL Operations.For more information about the temporary mapping index, see Disk Space Requirements for Index DDL Operations.

Сводка по определению потребности в месте на дискеDisk Space Summary

В следующей таблице подведены итоги вычислений места на диске.The following table summarizes the results of the disk space calculations.

Операция с индексамиIndex operation Требования к месту на диске для местоположений следующих структурDisk space requirements for the locations of the following structures
Операция с индексами вне сети при SORT_IN_TEMPDB = ONOffline index operation with SORT_IN_TEMPDB = ON Общий объем занятого места во время операции: 1018 МБTotal space during the operation: 1018 MB

— Существующая таблица и индексы: 363 МБ*-Existing table and indexes: 363 MB*

-
tempdb: 202 МБ*tempdb: 202 MB*

- Новые индексы: 453 МБ-New indexes: 453 MB

Общий объем необходимого места после операции: 453 МБTotal space required after the operation: 453 MB
Операция с индексами вне сети при SORT_IN_TEMPDB = OFFOffline index operation with SORT_IN_TEMPDB = OFF Общий объем занятого места во время операции: 816 МБTotal space during the operation: 816 MB

- Существующая таблица и индексы: 363 МБ*-Existing table and indexes: 363 MB*

- Новые индексы: 453 МБ-New indexes: 453 MB

Общий объем необходимого места после операции: 453 МБTotal space required after the operation: 453 MB
Операция с индексами в режиме в сети при SORT_IN_TEMPDB = ONOnline index operation with SORT_IN_TEMPDB = ON Общий объем занятого места во время операции: 1058 МБTotal space during the operation: 1058 MB

— Существующая таблица и индексы: 363 МБ*-Existing table and indexes: 363 MB*

-
tempdb (включая индекс сопоставления): 242 МБ*tempdb (includes mapping index): 242 MB*

- Новые индексы: 453 МБ-New indexes: 453 MB

Общий объем необходимого места после операции: 453 МБTotal space required after the operation: 453 MB
Операция с индексами в режиме в сети при SORT_IN_TEMPDB = OFFOnline index operation with SORT_IN_TEMPDB = OFF Общий объем занятого места во время операции: 856 МБTotal space during the operation: 856 MB

- Существующая таблица и индексы: 363 МБ*-Existing table and indexes: 363 MB*

— Временный индекс сопоставления: 40 МБ*-Temporary mapping index: 40 MB*

- Новые индексы: 453 МБ-New indexes: 453 MB

Общий объем необходимого места после операции: 453 МБTotal space required after the operation: 453 MB

*Это место освобождается после того, как операция с индексами зафиксирована.*This space is deallocated after the index operation is committed.

В этом примере не учитываются дополнительные требования к месту на диске в базе данных tempdb для записи версий, созданных параллельными операциями обновления или удаления, осуществляемыми пользователем.This example does not consider any additional temporary disk space required in tempdb for version records created by concurrent user update and delete operations.

Disk Space Requirements for Index DDL OperationsDisk Space Requirements for Index DDL Operations

Место на диске журнала транзакций для операций обработки индексаTransaction Log Disk Space for Index Operations