Odhad velikosti clusterovaného indexu
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL 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:
Vypočítejte místo použité k ukládání dat na úrovni listu clusterovaného indexu.
Vypočítejte místo použité k ukládání informací o indexu pro clusterovaný index.
Součet počítaných hodnot
Krok 1. Výpočet místa použitého k ukládání dat na úrovni listu
Zadejte počet řádků, které budou v tabulce přítomné:
Num_Rows = počet řádků v tabulce
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
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é.
Čá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.
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.
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.
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.
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.
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.
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:
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
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é.
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.
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.
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)
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.
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.
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.
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ů.