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


Пример использования пространства индекса на диске

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

Каждый раз, когда создается, перестраивается или удаляется индекс, требуется место на диске как для старых (исходных), так и для новых (целевых) структур в соответствующих файлах и файловых группах. Старая структура не будет удалена до фиксации транзакции создания индекса. Также может потребоваться дополнительное временное место на диске для операций сортировки. Дополнительные сведения см. в разделе "Требования к дисковому пространству для операций DDL индекса".

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

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

  • Существующая таблица (куча) содержит 1 миллион строк. Длина каждой строки составляет 200 байт.
  • Некластеризованный индекс А содержит 1 миллион строк. Длина каждой строки составляет 50 байт.
  • Некластеризованный индекс В содержит 1 миллион строк. Длина каждой строки составляет 80 байт.
  • Параметру «index create memory» присвоено значение 2 МБ.
  • Для всех существующих и новых индексов используется значение коэффициента заполнения, равное 80. Это означает, что страницы заполнены на 80%.

Примечание.

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

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

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

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

    • Heap: 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_TEMPDBON) и сортировки в целевом расположении (с SORT_IN_TEMPDB установленным значением OFF).

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

      Дополнительное место на диске (в месте) в объеме, равном значению памяти создания индекса , составляет 2 МБ.

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

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

      Дополнительное место на диске (в целевом расположении) должно быть равно значению создания индекса в памяти = 2 МБ.

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

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

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

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

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

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

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

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

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

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

Дополнительные сведения об индексе временного сопоставления см. в разделе "Требования к дисковой области" для операций DDL индекса.

Сводка места на диске

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

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

— Существующая таблица и индексы: 363 МБ 1
- tempdb: 202 МБ 1
- Новые индексы: 453 МБ

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

— Существующая таблица и индексы: 363 МБ 1
- Новые индексы: 453 МБ

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

— Существующая таблица и индексы: 363 МБ 1
- tempdb (включает индекс сопоставления): 242 МБ*
- Новые индексы: 453 МБ

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

— Существующая таблица и индексы: 363 МБ 1
- Временный индекс сопоставления: 40 МБ 1
- Новые индексы: 453 МБ

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

1 Это пространство освобождается после коммита операции индекса.

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