Sdílet prostřednictvím


Příklad na indexování místa na disku

Platí pro:SQL ServerAzure SQL DatabaseSpravovaná instance Azure SQLDatabáze SQL v Microsoft Fabric

Při každém vytvoření, novém vytvoření nebo vyřazení indexu se ve vhodných souborech a skupinách souborů vyžaduje místo na disku pro staré (zdrojové) i nové (cílové) struktury. Stará struktura není uvolněna, dokud není dokončena transakce pro vytvoření indexu. Může být také potřeba další dočasné místo na disku pro operace řazení. Další informace najdete v tématu Požadavky na místo na disku pro operace DDL indexu.

V tomto příkladu se určují požadavky na místo na disku pro vytvoření clusterovaného indexu.

Před vytvořením clusterovaného indexu předpokládejme, že platí následující podmínky:

  • Existující tabulka (halda) obsahuje 1 milion řádků. Každý řádek je dlouhý 200 bajtů.
  • Neclusterovaný index A obsahuje 1 milion řádků. Každý řádek je dlouhý 50 bajtů.
  • Neclusterovaný index B obsahuje 1 milion řádků. Každý řádek je dlouhý 80 bajtů.
  • Možnost vytvoření paměti indexu je nastavená na 2 MB.
  • Hodnota 80 výplňového faktoru se používá pro všechny existující a nové indexy. To znamená, že stránky jsou plné 80 procent.

Poznámka

V důsledku vytvoření clusterovaného indexu je nutné znovu vytvořit dva neclusterované indexy, aby se indikátor řádku nahradil novým clusterovaným klíčem indexu.

Výpočty místa na disku pro operaci offline indexu

V následujících krocích se vypočítává dočasné místo na disku, které se má použít během operace indexu, i trvalé místo na disku k uložení nových indexů. Zobrazené výpočty jsou přibližné; výsledky jsou zaokrouhleny nahoru a zvažují pouze velikost úrovně listu indexu. Tilda (~) slouží k označení přibližných výpočtů.

  1. Určete velikost zdrojových struktur.

    • Halda: 1 milión * 200 bajtů ~ 200 MB
    • Neclusterovaný index A: 1 milion * 50 bajtů / 80% ~ 63 MB
    • Neclusterovaný index B: 1 milion * 80 bajtů / 80% ~ 100 MB

    Celková velikost existujících struktur: 363 MB

  2. Určete velikost struktur cílového indexu. Předpokládejme, že nový clusterovaný klíč je dlouhý 24 bajtů, včetně zajišťovače jedinečnosti. Indikátor řádku (8 bajtů dlouhý) v obou neclusterovaných indexech bude nahrazen tímto clusterovaným klíčem.

    • Clusterovaný index: 1 milion × 200 bajtů / 80% ~ 250 MB

    • Neclusterovaný index A: 1 milion * (50 - 8 + 24) bajtů / 80% ~ 83 MB

    • Neclusterovaný index B: 1 milion * (80 - 8 + 24) bajtů / 80% ~ 120 MB

    • Celková velikost nových struktur: 453 MB

    Celkové místo na disku potřebné k podpoře zdrojové i cílové struktury během operace indexu je 816 MB (363 + 453). Prostor, který je aktuálně přidělen zdrojovým strukturám, bude uvolněn po potvrzení indexové operace.

  3. Určete další dočasné místo na disku pro řazení.

    Požadavky na místo se zobrazují pro řazení tempdb (s nastaveným SORT_IN_TEMPDB na ON) a řazení v cílovém umístění (s nastaveným SORT_IN_TEMPDB na OFF).

    1. Pokud SORT_IN_TEMPDB je nastavená hodnota ON, tempdb musí mít dostatek místa na disku pro uložení největšího indexu (1 milion × 200 bajtů ~ 200 MB). Fill factor se v operaci řazení nezohledňuje.

      Další místo na disku (v tempdb umístění) rovnající se indexu vytvoří hodnotu paměti = 2 MB.

      Celková velikost dočasného místa na disku s SORT_IN_TEMPDB nastaveným na ~ ON 202 MB.

    2. Pokud SORT_IN_TEMPDB je nastavená hodnota OFF (výchozí), použije se k řazení 250 MB místa na disku, které se už považuje za nový index v kroku 2.

      Požadováno je další místo na disku (v cílovém umístění) rovnající se hodnotě paměti pro vytvoření indexu, což je 2 MB.

      Celková velikost dočasného místa na disku s nastavenou SORT_IN_TEMPDB na OFF = 2 MB.

K vytvoření clusterovaných a neclusterovaných indexů by bylo potřeba použít tempdbcelkem 1018 MB (816 + 202). I když použití tempdb zvyšuje množství dočasného místa na disku použitém k vytvoření indexu, může zkrátit dobu potřebnou k vytvoření indexu v tempdb případě, že je na jiné sadě disků než uživatelská databáze. Další informace o použití tempdb naleznete v tématu Možnost SORT_IN_TEMPDB pro indexy.

Bez použití tempdbby bylo potřeba k vytvoření clusterovaných a neclusterovaných indexů celkem 818 MB (816 + 2).

Výpočty místa na disku pro online clusterovanou operaci indexu

Při vytváření, odstraňování nebo opětovném sestavení clusterovaného indexu online se k sestavení a údržbě dočasného indexu mapování vyžaduje další místo na disku. Tento dočasný index mapování obsahuje jeden záznam pro každý řádek v tabulce a jeho obsah je sjednocení starých a nových sloupců záložek.

Pokud chcete vypočítat místo na disku potřebné pro operaci online clusterovaného indexu, postupujte podle kroků zobrazených pro operaci offline indexu a přidejte tyto výsledky do výsledků následujícího kroku.

  • Určete prostor dočasného indexu mapování.

    V tomto příkladu je stará záložka ID řádku (RID) haldy (8 bajtů) a nová záložka je clusteringový klíč (24 bajtů včetně uniqueifier). Mezi starými a novými záložkami se nepřekrývají žádné překrývající se sloupce.

    Dočasná velikost indexu mapování = 1 milion * (8 bajtů + 24 bajtů) / 80% ~ 40 MB.

    Toto místo na disku musí být přidáno k požadovanému místu na disku v cílovém umístění, pokud je nastaveno SORT_IN_TEMPDB na OFF hodnotu, nebo na tempdb, pokud je SORT_IN_TEMPDB nastaveno na ON hodnotu.

Další informace o dočasném indexu mapování najdete v tématu Požadavky na místo na disku pro operace DDL indexu.

Souhrn místa na disku

Následující tabulka shrnuje výsledky výpočtů místa na disku.

Operace indexu Požadavky na místo na disku pro umístění následujících struktur
Operace offline indexu s využitím SORT_IN_TEMPDB = ON Celkový prostor během operace: 1 018 MB

- Existující tabulka a indexy: 363 MB 1
- tempdb: 202 MB 1
- Nové indexy: 453 MB

Celková požadovaná mezera po operaci: 453 MB
Operace offline indexu s využitím SORT_IN_TEMPDB = OFF Celkový prostor během operace: 816 MB

- Existující tabulka a indexy: 363 MB 1
- Nové indexy: 453 MB

Celková požadovaná mezera po operaci: 453 MB
Operace online indexu s využitím SORT_IN_TEMPDB = ON Celkový prostor během operace: 1 058 MB

- Existující tabulka a indexy: 363 MB 1
- tempdb (zahrnuje index mapování): 242 MB*
- Nové indexy: 453 MB

Celková požadovaná mezera po operaci: 453 MB
Operace online indexu s využitím SORT_IN_TEMPDB = OFF Celkový prostor během operace: 856 MB

- Existující tabulka a indexy: 363 MB 1
- Dočasný index mapování: 40 MB 1
- Nové indexy: 453 MB

Celková požadovaná mezera po operaci: 453 MB

1 Toto místo je uvolněno po potvrzení operace indexu.

Tento příklad nebere v tempdb úvahu žádné další dočasné místo na disku vyžadované pro záznamy verzí vytvořené souběžnými operacemi aktualizace uživatele a odstranění.