Пример места на диске для индекса

Область применения: yesSQL Server (все поддерживаемые версии)

Каждый раз, когда создается, перестраивается или удаляется индекс, требуется место на диске как для старых (исходных), так и для новых (целевых) структур в соответствующих файлах и файловых группах. Место, занимаемое старой структурой, не освобождается до тех пор, пока транзакция создания индекса не будет зафиксирована. Может также потребоваться дополнительное временное место на диске для операций сортировки. Дополнительные сведения см. в статье Disk Space Requirements for Index DDL Operations.

В этом примере будут определены потребности в месте на диске для создания кластеризованного индекса.

Предположим, что до создания кластеризованного индекса выполнены следующие условия.

  • Существующая таблица (куча) содержит 1 миллион строк. Длина каждой строки составляет 200 байт.

  • Некластеризованный индекс А содержит 1 миллион строк. Длина каждой строки составляет 50 байт.

  • Некластеризованный индекс В содержит 1 миллион строк. Длина каждой строки составляет 80 байт.

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

  • Для всех существующих и новых индексов используется значение коэффициента заполнения, равное 80. Это означает, что страницы заполнены на 80%.

    Примечание

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

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

Следующие шаги служат для вычисления как временного места на диске для использования во время индексной операции, так и постоянного места для хранения новых индексов. Приведенные вычисления приблизительны: результаты округляются и учитывают только размер конечного уровня индекса. Тильда (~) используется, чтобы отметить приблизительные вычисления.

  1. Определите размер исходных структур.

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

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

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

    Общий размер существующих структур: 363 МБ

  2. Определите размер целевых структур индексов. Предположим, что новый кластеризованный ключ имеет длину 24 байта, включая уникальный идентификатор. Признак строк (длиной 8 байт) в обоих некластеризованных индексах будет заменен этим кластеризованным ключом.

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

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

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

    Общий размер новых структур: 453 МБ

    Полное место на диске, необходимое для поддержки и исходных, и целевых структур в процессе операции с индексами, составляет 816 МБ (363 + 453). Место, выделенное под исходные структуры, будет освобождено после фиксации операции с индексами.

  3. Определите дополнительное временное место на диске для сортировки.

    Потребность в дисковом пространстве показана для сортировки в базе данных tempdb (с параметром SORT_IN_TEMPDB, установленным в ON) и сортировки в целевом местоположении (с параметром SORT_IN_TEMPDB, установленным в OFF).

    1. Когда параметр SORT_IN_TEMPDB установлен в ON, база данных tempdb должна иметь достаточно места на диске, чтобы хранить наибольший индекс (1 миллион * 200 байт ~ 200 МБ). Коэффициент заполнения в операции сортировки не учитывается.

      Дополнительное место на диске (в расположении базы данных tempdb ), равное значению параметра index create memory = 2 МБ.

      Общий размер временного места на диске с параметром SORT_IN_TEMPDB, установленным в ON ~ 202 МБ.

    2. Когда параметру SORT_IN_TEMPDB присвоено значение OFF (значение по умолчанию), 250 МБ места на диске, уже предназначенные для нового индекса на шаге 2, используются для сортировки.

      Дополнительное место на диске (на целевом диске), равное значению параметра Настройка параметра конфигурации сервера index create memory = 2 МБ.

      Общий размер временного места на диске с параметром SORT_IN_TEMPDB, установленным в OFF = 2 МБ.

При использовании базы данных tempdbпотребуется всего 1018 МБ (816 + 202), чтобы создать кластеризованные и некластеризованные индексы. Хотя использование базы данных tempdb увеличивает количество временного места на диске, которое используется для создания индекса, оно может уменьшить время создания индекса, если база данных tempdb и пользовательская база данных находятся на разных наборах дисков. Дополнительные сведения об использовании tempdbсм. в разделе Параметр SORT_IN_TEMPDB для индексов.

Без использования базы данных tempdbдля создания кластеризованных и некластеризованных индексов потребуется всего 818 МБ (2 + 816).

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

Когда кластеризованный индекс создается, удаляется или перестраивается в режиме в сети, требуется дополнительное место на диске для построения и поддержания временного индекса сопоставления. Этот временный индекс сопоставления содержит по одной записи для каждой строки таблицы и состоит из объединения старых и новых столбцов закладок.

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

  • Определите место для временного индекса сопоставления.

    В этом примере старая закладка — это идентификатор строки (RID) кучи (8 байт), а новая — ключ кластеризации (24 байта, включая uniqueifier). У старой и новой закладок нет пересекающихся столбцов.

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

    Такой объем надо прибавить к месту, нужному в целевом расположении, если параметр SORT_IN_TEMPDB установлен в OFF, или к базе данных tempdb , если параметр SORT_IN_TEMPDB установлен в ON.

Дополнительные сведения о временном индексе сопоставления см. в статье Disk Space Requirements for Index DDL Operations.

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

В следующей таблице подведены итоги вычислений места на диске.

Операция с индексами Требования к месту на диске для местоположений следующих структур
Операция с индексами вне сети при SORT_IN_TEMPDB = ON Общий объем занятого места во время операции: 1018 МБ

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

-
tempdb: 202 МБ*

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

Общий объем необходимого места после операции: 453 МБ
Операция с индексами вне сети при SORT_IN_TEMPDB = OFF Общий объем занятого места во время операции: 816 МБ

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

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

Общий объем необходимого места после операции: 453 МБ
Операция с индексами в режиме в сети при SORT_IN_TEMPDB = ON Общий объем занятого места во время операции: 1058 МБ

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

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

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

Общий объем необходимого места после операции: 453 МБ
Операция с индексами в режиме в сети при SORT_IN_TEMPDB = OFF Общий объем занятого места во время операции: 856 МБ

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

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

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

Общий объем необходимого места после операции: 453 МБ

*Это место освобождается после того, как операция с индексами зафиксирована.

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

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

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