Sdílet prostřednictvím


Odhad velikosti clusterovaného indexu

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL database 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é budou v tabulce přítomné:

    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í jedinečný, počítejte se sloupcem uniqueifier:

    Uniqueifier je sloupec s možností hodnoty null a proměnnou délkou. Bude mít hodnotu nenulovou a 4 bajty ve velikosti v řádcích, které mají hodnoty klíče, které nejsou jedinečné. 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_Cols + 1

    Num_Variable_Cols = Num_Variable_Cols + 1

    Max_Var_Size = Max_Var_Size + 4

    Tyto úpravy předpokládají, že všechny hodnoty nebudou jedinečné.

  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.

    Poznámka

    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 však mohou 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_Size + Null_Bitmap + 4

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

  7. Výpočet počtu řádků na stránku (8096 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 uloží více dat a bude jich méně. 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 8192 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 ukládání 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í jedinečný, je potřeba počítat s libovolným jedinečným parametrem:

    Uniqueifier je sloupec, který může mít hodnotu null a má proměnnou délku. Bude nenulový o velikosti 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_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_Size + 4

    Tyto úpravy předpokládají, že všechny hodnoty nebudou jedinečné.

  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. Vypočítat počet řádků indexu na stránku (8096 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. Hodnota 2 ve vzorci slouží pro položku řádku v poli pozic na stránce.

  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čítejte počet stránek, které nejsou listovými v indexu.

    Num_Index_Pages = ∑Level (Num_Leaf_Pages / (Index_Rows_Per_Page^Level))

    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 stránku listu a 25 řádků indexu se může vejít na stránku. To znamená, že k uložení těchto 1000 řádků indexu je potřeba 40 stránek. Další úroveň indexu musí uložit 40 řádků. To znamená, že vyžaduje 2 stránky. Poslední úroveň indexu musí ukládat 2 řádky. To znamená, že vyžaduje 1 stránku. To poskytuje 43 nerozvětvovací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 (8192 celkových 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í:

  • Rozkládání

    Prostorová režie při dělení je minimální, ale složitá pro výpočet. Není důležité to zahrnout.

  • Stránky přidělení

    Ke sledování stránek přidělených haldě se používá alespoň jedna stránka IAM, ale režie prostoru je minimální a neexistuje algoritmus, který by umožnil přesně a deterministicky vypočítat, kolik stránek IAM bude použito.

  • Velké hodnoty objektu (LOB)

    Algoritmus, který přesně určí, kolik místa se použije k ukládání datových typů LOB varchar(max), varbinary(max), nvarchar(max), text, ntext, xmla image hodnot, je složitý. Stačí jenom přidat průměrnou velikost očekávaných hodnot LOB, vynásobit Num_Rowsa 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ů.

Další kroky