Sdílet prostřednictvím


Odhad velikosti clusterovaného indexu

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

Pomocí následujících kroků můžete odhadnout velikost místa potřebného k ukládání dat do clusterovaného indexu:

  1. Vypočítejte místo použité k ukládání dat na úrovni listu clusterovaného indexu.
  2. Vypočítejte místo použité k ukládání informací o indexu pro clusterovaný index.
  3. Součet počítaných hodnot

Krok 1. Výpočet místa použitého k ukládání dat na úrovni listu

  1. Zadejte počet řádků, které jsou přítomné v tabulce:

    • Num_Rows = počet řádků v tabulce
  2. Zadejte počet sloupců s pevnou délkou a proměnlivou délkou a vypočítejte prostor potřebný pro jejich úložiště:

    Vypočítá mezeru, kterou každá z těchto skupin sloupců zabírá v řádku dat. Velikost sloupce závisí na datovém typu a specifikaci délky.

    • Num_Cols = celkový počet sloupců (pevná délka a proměnná délka)
    • Fixed_Data_Size = celková velikost bajtů všech sloupců s pevnou délkou
    • Num_Variable_Cols = počet sloupců s proměnnou délkou
    • Max_Var_Size = maximální velikost bajtu všech sloupců s proměnlivou délkou
  3. Pokud clusterovaný index není unikátní, zohledněte sloupec uniqueifier:

    Uniqueifier je sloupec s možností hodnoty null a proměnnou délkou. Má nenulovou hodnotu a velikost 4 bajty v řádcích, které mají neunikátní hodnoty klíče. Tato hodnota je součástí indexového klíče a musí se ujistit, že každý řádek má jedinečnou hodnotu klíče.

    • Num_Cols = Num_ColsNum_Cols + 1
    • Num_Variable_Cols = Num_Variable_ColsNum_Variable_Cols + 1
    • = Max_Var_SizeMax_Var_Size + 4

    Tyto úpravy předpokládají, že všechny hodnoty nejsouunique.

  4. Část řádku, která se označuje jako rastrový obrázek s hodnotou null, je vyhrazena ke správě hodnoty null sloupce. Vypočítat jeho velikost:

    • Null_Bitmap = 2 + ((Num_Cols + 7) / 8)

    Je třeba použít pouze celočíselnou část předchozího výrazu; zahoďte zbývající část.

  5. Výpočet velikosti dat s proměnnou délkou:

    Pokud jsou v tabulce sloupce s proměnlivou délkou, určete, kolik místa se používá k ukládání sloupců v řádku:

    • Variable_Data_Size = 2 + (Num_Variable_Cols x 2) + Max_Var_Size

    Bajty přidané do Max_Var_Size slouží ke sledování jednotlivých sloupců proměnných. Tento vzorec předpokládá, že všechny sloupce s proměnlivou délkou jsou plné 100 procent. Pokud předpokládáte, že se použije menší procento prostoru úložiště sloupce s proměnlivou délkou, můžete upravit hodnotu Max_Var_Size podle tohoto procenta, aby bylo možné získat přesnější odhad celkové velikosti tabulky.

    Můžete kombinovat varchar, nvarchar, varbinárnínebo sql_variant sloupce, které způsobují, že celková definovaná šířka tabulky přesahuje 8 060 bajtů. Délka každého z těchto sloupců musí stále spadat do limitu 8 000 bajtů pro sloupce varchar, varbinarynebo sql_variant a 4 000 bajtů pro sloupce nvarchar. Jejich kombinované šířky ale můžou překročit limit 8 060 bajtů v tabulce.

    Pokud neexistují žádné sloupce s proměnnou délkou, nastavte Variable_Data_Size na 0.

  6. Vypočítejte celkovou velikost řádku:

    • = Row_Size + Fixed_Data_Size + Variable_Data_SizeNull_Bitmap + 4

    Hodnota 4 je překrytí záhlaví datového řádku.

  7. Výpočet počtu řádků na stránku (8 096 volných bajtů na stránku):

    • řádky_na_stránku = 8096 / (velikost_řádku + 2)

    Vzhledem k tomu, že řádky nepřesahují stránky, měl by se počet řádků na stránku zaokrouhlit dolů na nejbližší celý řádek. Hodnota 2 ve vzorci je pro položku řádku v poli slotu stránky.

  8. Vypočítejte počet rezervovaných volných řádků na stránku na základě zadaného faktoru vyplnění .

    • Free_Rows_Per_Page = 8096 x ((100 - Fill_Factor) / 100) / (Row_Size + 2)

    Faktor výplně použitý ve výpočtu je celočíselná hodnota místo procenta. Vzhledem k tomu, že řádky nepřesahují stránky, měl by se počet řádků na stránku zaokrouhlit dolů na nejbližší celý řádek. S rostoucím faktorem výplně se na každé stránce ukládá více dat a na každé stránce je méně stránek. Hodnota 2 ve vzorci je pro položku řádku v poli slotu stránky.

  9. Výpočet počtu stránek potřebných k uložení všech řádků:

    • Počet_listových_stránek = Počet_řádků / (Řádky_na_stránku - Volné_řádky_na_stránku)

    Odhadovaný počet stránek by se měl zaokrouhlit nahoru na nejbližší celou stránku.

  10. Vypočítejte množství místa potřebného k uložení dat na úrovni listu (celkem 8 192 bajtů na stránku):

    • Leaf_space_used = 8192 x Počet_stránek_listu

Krok 2. Výpočet místa použitého k uložení informací indexu

K odhadu velikosti místa potřebného k uložení horních úrovní indexu můžete použít následující kroky:

  1. Zadejte počet sloupců s pevnou délkou a proměnlivou délkou v klíči indexu a vypočítejte požadovaný prostor pro úložiště:

    Klíčové sloupce indexu mohou obsahovat sloupce s pevnou délkou a proměnnou délkou. Pokud chcete odhadnout velikost řádku indexu na úrovni interiéru, vypočítejte mezeru, kterou každá z těchto skupin sloupců zabírá v řádku indexu. Velikost sloupce závisí na datovém typu a specifikaci délky.

    • Num_Key_Cols = celkový počet klíčových sloupců (pevná délka a proměnná délka)
    • Fixed_Key_Size = celková velikost bajtů všech sloupců klíčů s pevnou délkou
    • Num_Variable_Key_Cols = počet sloupců klíče s proměnnou délkou
    • Max_Var_Key_Size = maximální velikost bajtu všech sloupců klíčů s proměnnou délkou
  2. Pokud index není unikátní, je nutné zajistit jakýkoliv potřebný jedinečný specifikátor.

    Uniqueifier je sloupec s možností hodnoty null a proměnnou délkou. Je nenulový a má velikost 4 bajty v řádcích, které mají neunikátní hodnoty klíče indexu. Tato hodnota je součástí indexového klíče a musí se ujistit, že každý řádek má jedinečnou hodnotu klíče.

    • Num_Key_Cols = Num_Key_ColsNum_Key_Cols + 1
    • Počet_Proměnných_Klíčových_Sloupců = Počet_Proměnných_Klíčových_Sloupců + 1
    • Max_Var_Key_Size = Max_Var_Key_SizeMax_Var_Key_Size + 4

    Tyto úpravy předpokládají, že všechny hodnoty nejsouunique.

  3. Výpočet velikosti rastrového obrázku s hodnotou null:

    Pokud jsou v klíči indexu sloupce s možnou hodnotou null, část řádku indexu je vyhrazena pro rastrový obrázek s hodnotou null. Vypočítat jeho velikost:

    • Index_Null_Bitmap = 2 + ((počet sloupců v řádku indexu + 7) / 8)

    Měla by se použít pouze celočíselná část předchozího výrazu. Zahoďte zbývající část.

    Pokud neexistují žádné klíčové sloupce s možnou hodnotou null, nastavte Index_Null_Bitmap na hodnotu 0.

  4. Výpočet velikosti dat s proměnnou délkou:

    Pokud jsou v indexu sloupce s proměnnou délkou, určete, kolik místa se používá k uložení sloupců v řádku indexu:

    • Proměnlivá_Velikost_Klíče = 2 + (Počet_Proměnlivých_Klíčových_Sloupců x 2) + Max_Proměnlivá_Velikost_Klíče

    Bajty přidané do Max_Var_Key_Size slouží ke sledování jednotlivých sloupců s proměnlivou délkou. Tento vzorec předpokládá, že všechny sloupce s proměnlivou délkou jsou plné 100 procent. Pokud předpokládáte, že se použije menší procento prostoru úložiště s proměnlivou délkou, můžete upravit Max_Var_Key_Size hodnotu podle tohoto procenta, abyste mohli získat přesnější odhad celkové velikosti tabulky.

    Pokud neexistují žádné sloupce s proměnlivou délkou, nastavte Variable_Key_Size na 0.

  5. Výpočet velikosti řádku indexu:

    • Index_Row_Size = Fixed_Key_Size + Variable_Key_Size + Index_Null_Bitmap + 1 (pro režii záhlaví řádku indexu) + 6 (pro ukazatel ID podřízené stránky)
  6. Výpočet počtu řádků indexu na stránku (8 096 volných bajtů na stránku):

    • Index_Rows_Per_Page = 8096 / (Index_Row_Size + 2)

    Vzhledem k tomu, že řádky indexu nepřesahují stránky, měl by se počet řádků indexu na stránku zaokrouhlit dolů na nejbližší celý řádek. Ve vzorci slouží 2 pro položku řádku v poli slotů stránky.

  7. Výpočet počtu úrovní v indexu:

    • Nelistové_úrovně = 1 + logaritmus (Index_Rows_Per_Page) (Num_Leaf_Pages / Index_Rows_Per_Page)

    Zaokrouhlí tuto hodnotu nahoru na nejbližší celé číslo. Tato hodnota nezahrnuje úroveň listu clusterovaného indexu.

  8. Vypočítat počet ne listových stránek v indexu:

    • Num_Index_Pages = ∑Level (Num_Leaf_Pages / (úroveň Index_Rows_Per_Page^))

      kde 1 <= Level <= Non-leaf_Levels

    Zaokrouhli každý sčítanec nahoru na nejbližší celé číslo. Jako jednoduchý příklad zvažte index, kde Num_Leaf_Pages = 1000 a Index_Rows_Per_Page = 25. První úroveň indexu nad úrovní listu ukládá 1 000 řádků indexu, což je jeden řádek indexu na listovou stránku a 25 řádků indexu se může vejít na stránku. To znamená, že pro uložení těchto 1 000 řádků indexu je potřeba 40 stránek. Další úroveň indexu musí uložit 40 řádků. To znamená, že vyžaduje dvě stránky. Poslední úroveň indexu musí ukládat dva řádky. To znamená, že vyžaduje jednu stránku. To poskytuje 43 nepoložkových indexových stránek. Pokud jsou tato čísla použita v předchozích vzorcích, výsledek je následující:

    • non-leaf_Levels = 1 + log(25) (1000 / 25) = 3

    • Num_Index_Pages = 1000/(25^3)+ 1000/(25^2) + 1000/(25^1) = 1 + 2 + 40 = 43, což je počet stránek popsaných v příkladu.

  9. Vypočítat velikost indexu (celkem 8 192 bajtů na stránku):

    • Využitý_prostor_indexu = 8192 x Počet_stránek_indexu

Krok 3. Součet počítaných hodnot

Součet hodnot získaných z předchozích dvou kroků:

  • Velikost clusterovaného indexu (bajty) = Leaf_Space_Used + Index_Space_used

Tento výpočet nebere v úvahu následující podmínky:

  • Dělení: Prostorová režie dělení je minimální, ale její výpočet je složitý. Není důležité to zahrnout.

  • Stránky přidělení: Ke sledování stránek přidělených haldě existuje alespoň jedna stránka IAM. Režijní náklady na prostor jsou minimální a neexistuje žádný algoritmus, který by deterministicky vypočítal, kolik stránek IAM se použije.

  • Velké hodnoty objektu (LOB): Algoritmus určující přesně, kolik místa se použije k uložení datových typů LOB varchar(max), varbinary(max), nvarchar(max), text, ntext, xml a image hodnoty je složitý. Stačí přidat průměrnou velikost očekávaných hodnot LOB, vynásobit Num_Rows a přidat ji k celkové velikosti clusterovaného indexu.

  • Komprese: Velikost komprimovaného indexu nelze předem vypočítat.

  • Řídké sloupce: Informace o požadavcích na prostor řídkých sloupců najdete v tématu Použití řídkých sloupců.