Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-database in Microsoft Fabric
U kunt de volgende stappen gebruiken om een schatting te maken van de hoeveelheid ruimte die nodig is voor het opslaan van gegevens in een geclusterde index:
Bereken de ruimte die wordt gebruikt voor het opslaan van gegevens in het bladniveau van de geclusterde index.
Bereken de ruimte die wordt gebruikt voor het opslaan van indexinformatie voor de geclusterde index.
Totaal van de berekende waarden.
Stap 1. De ruimte berekenen die wordt gebruikt voor het opslaan van gegevens in het leaf-niveau
Geef het aantal rijen op dat aanwezig is in de tabel:
Num_Rows = aantal rijen in de tabel
Geef het aantal kolommen met vaste lengte en variabele lengte op en bereken de ruimte die nodig is voor de opslag:
Bereken de ruimte die elk van deze groepen kolommen inneemt binnen de gegevensrij. De grootte van een kolom is afhankelijk van het gegevenstype en de lengtespecificatie.
Num_Cols = totaal aantal kolommen (vaste lengte en variabele lengte)
Fixed_Data_Size = totale bytegrootte van alle kolommen met vaste lengte
Num_Variable_Cols = aantal kolommen met variabele lengte
Max_Var_Size = maximale bytegrootte van alle kolommen met variabele lengte
Als de geclusterde index niet uniek is, moet u rekening houden met de uniqueifier--kolom.
De uniqueifier is een kolom die null-waarden kan bevatten en een variabele lengte heeft. Het zal niet-null zijn en 4 bytes in grootte in rijen die niet-unieke sleutelwaarden hebben. Deze waarde maakt deel uit van de indexsleutel en is vereist om ervoor te zorgen dat elke rij een unieke sleutelwaarde heeft.
Num_Cols = Num_Cols + 1
Num_Variable_Cols = Num_Variable_Cols + 1
Max_Var_Size = Max_Var_Size + 4
Bij deze wijzigingen wordt ervan uitgegaan dat alle waarden niet uniek zijn.
Een deel van de rij, dat bekend staat als de null-bitmap, is gereserveerd voor het beheren van de mogelijkheid tot null-waarden in kolommen. De grootte ervan berekenen:
Null_Bitmap = 2 + ((Num_Cols + 7) / 8)
Alleen het gehele getal van de vorige expressie moet worden gebruikt; verwijder een restgetal.
De gegevensgrootte van de variabele lengte berekenen:
Als er kolommen met een variabele lengte in de tabel staan, bepaalt u hoeveel ruimte wordt gebruikt om de kolommen in de rij op te slaan:
Variable_Data_Size = 2 + (Num_Variable_Cols x 2) + Max_Var_Size
De bytes die zijn toegevoegd aan Max_Var_Size zijn voor het bijhouden van elke variabelekolom. In deze formule wordt ervan uitgegaan dat alle kolommen met variabele lengte 100 procent vol zijn. Als u verwacht dat een kleiner percentage van de kolomopslagruimte met variabele lengte wordt gebruikt, kunt u de Max_Var_Size waarde met dat percentage aanpassen om een nauwkeurigere schatting te maken van de totale tabelgrootte.
Notitie
U kunt varchar, nvarchar, varbinaireof sql_variant kolommen combineren waardoor de totale gedefinieerde tabelbreedte groter is dan 8.060 bytes. De lengte van elk van deze kolommen moet nog steeds binnen de limiet van 8000 bytes vallen voor een varchar-, varbinaireof sql_variant kolom, en 4000 bytes voor nvarchar kolommen. De gecombineerde breedte kan echter groter zijn dan de limiet van 8.060 byte in een tabel.
Als er geen kolommen met variabele lengte zijn, stelt u Variable_Data_Size in op 0.
De totale rijgrootte berekenen:
Row_Size = Fixed_Data_Size + Variable_Data_Size + Null_Bitmap + 4
De waarde 4 is de rijkopoverhead van een gegevensrij.
Het aantal rijen per pagina berekenen (8096 gratis bytes per pagina):
Rijen_per_pagina = 8096 / (Rij_grootte + 2)
Omdat rijen geen pagina's omvatten, moet het aantal rijen per pagina omlaag worden afgerond op de dichtstbijzijnde hele rij. De waarde 2 in de formule is voor de vermelding van de rij in de slotarray van de pagina.
Bereken het aantal gereserveerde gratis rijen per pagina op basis van de vulfactor opgegeven:
Free_Rows_Per_Page = 8096 x ((100 - Fill_Factor) / 100) / (Row_Size + 2)
De opvulfactor die in de berekening wordt gebruikt, is een geheel getal in plaats van een percentage. Omdat rijen geen pagina's omvatten, moet het aantal rijen per pagina omlaag worden afgerond op de dichtstbijzijnde hele rij. Naarmate de opvulfactor groeit, worden er meer gegevens op elke pagina opgeslagen en zijn er minder pagina's. De waarde 2 in de formule is voor de vermelding van de rij in de sleuvenarray van de pagina.
Bereken het aantal pagina's dat nodig is om alle rijen op te slaan:
Aantal_Bladzijdes = Aantal_Rijen / (Rijen_Per_Pagina - Vrije_Rijen_Per_Pagina)
Het geschatte aantal pagina's moet worden afgerond naar de dichtstbijzijnde hele pagina.
Bereken de hoeveelheid ruimte die nodig is om de gegevens op het bladniveau op te slaan (8192 totaal aantal bytes per pagina):
Leaf_space_used = 8192 x Num_Leaf_Pages
Stap 2. De ruimte berekenen die wordt gebruikt om indexinformatie op te slaan
U kunt de volgende stappen gebruiken om een schatting te maken van de hoeveelheid ruimte die nodig is om de bovenste niveaus van de index op te slaan:
Geef het aantal kolommen met vaste lengte en variabele lengte op in de indexsleutel en bereken de benodigde ruimte voor de opslag:
De belangrijkste kolommen van een index kunnen kolommen met een vaste lengte en variabele lengte bevatten. Als u de grootte van de indexrij van het interieurniveau wilt schatten, berekent u de ruimte die elk van deze groepen kolommen in de indexrij in beslag neemt. De grootte van een kolom is afhankelijk van het gegevenstype en de lengtespecificatie.
Num_Key_Cols = totaal aantal sleutelkolommen (vaste lengte en variabele lengte)
Fixed_Key_Size = totale bytegrootte van alle sleutelkolommen met vaste lengte
Num_Variable_Key_Cols = aantal sleutelkolommen met variabele lengte
Max_Var_Key_Size = maximale bytegrootte van alle sleutelkolommen met variabele lengte
Houd rekening met elke unieke factor die nodig is als de index niet uniek is.
De uniqueifier is een nullable kolom met een variabele lengte. Het is niet-ull en 4 bytes groot in rijen met niet-unieke indexsleutelwaarden. Deze waarde maakt deel uit van de indexsleutel en is vereist om ervoor te zorgen dat elke rij een unieke sleutelwaarde heeft.
Num_Key_Cols = Num_Key_Cols + 1
Num_Variable_Key_Cols = Num_Variable_Key_Cols + 1
Max_Var_Key_Size = Max_Var_Key_Size + 4
Bij deze wijzigingen wordt ervan uitgegaan dat alle waarden niet uniek zijn.
De grootte van de null-bitmap berekenen:
Als er null-kolommen in de indexsleutel staan, is een deel van de indexrij gereserveerd voor de null-bitmap. De grootte ervan berekenen:
Index_Null_Bitmap = 2 + ((aantal kolommen in de indexrij + 7) / 8)
Alleen het gehele getal van de vorige expressie moet worden gebruikt. Verwijder een restgetal.
Als er geen nullable-sleutelkolommen zijn, stelt u Index_Null_Bitmap in op 0.
De gegevensgrootte van de variabele lengte berekenen:
Als er kolommen met variabele lengte in de index staan, bepaalt u hoeveel ruimte wordt gebruikt om de kolommen op te slaan in de indexrij:
Variable_Key_Size = 2 + (Num_Variable_Key_Cols x 2) + Max_Var_Key_Size
De bytes die zijn toegevoegd aan Max_Var_Key_Size zijn voor het bijhouden van elke kolom met variabele lengte. In deze formule wordt ervan uitgegaan dat alle kolommen met variabele lengte 100 procent vol zijn. Als u verwacht dat een kleiner percentage van de kolomopslagruimte met variabele lengte wordt gebruikt, kunt u de Max_Var_Key_Size waarde met dat percentage aanpassen om een nauwkeurigere schatting te maken van de totale tabelgrootte.
Als er geen kolommen met variabele lengte zijn, stelt u Variable_Key_Size in op 0.
De grootte van de indexrij berekenen:
Index_Row_Size = Fixed_Key_Size + Variable_Key_Size + Index_Null_Bitmap + 1 (voor kopregeloverhead van een indexrij) + 6 (voor de aanwijzer voor de onderliggende pagina-id)
Het aantal indexrijen per pagina berekenen (8096 gratis bytes per pagina):
Index_Rows_Per_Page = 8096 / (Index_Row_Size + 2)
Omdat indexrijen geen pagina's omvatten, moet het aantal indexrijen per pagina omlaag worden afgerond op de dichtstbijzijnde hele rij. De 2 in de formule is voor de positie van de rij in de slotarray van de pagina.
Het aantal niveaus in de index berekenen:
Niet-leaf-niveaus = 1 + log (Index_Rows_Per_Page) (Num_Leaf_Pages / Index_Rows_Per_Page)
Rond deze waarde naar boven af op het dichtstbijzijnde gehele getal. Deze waarde bevat niet het bladniveau van de geclusterde index.
Het aantal niet-bladpagina's in de index berekenen:
Num_Index_Pages = ∑Niveau (Num_Leaf_Pages / (Index_Rows_Per_Page^Niveau))
waarbij 1 <= Niveau <= Niet-bladniveaus
Rond elke som naar boven af op het dichtstbijzijnde gehele getal. Als eenvoudig voorbeeld kunt u een index overwegen waarbij Num_Leaf_Pages = 1000 en Index_Rows_Per_Page = 25. Op het eerste indexniveau boven het bladniveau worden 1000 indexrijen opgeslagen. Dit is één indexrij per bladpagina en 25 indexrijen kunnen per pagina passen. Dit betekent dat er 40 pagina's nodig zijn om die 1000 indexrijen op te slaan. Het volgende niveau van de index moet 40 rijen opslaan. Dit betekent dat er twee pagina's nodig zijn. Het laatste niveau van de index moet 2 rijen opslaan. Dit betekent dat er één pagina is vereist. Dit geeft 43 niet-bladindexpagina's. Wanneer deze getallen worden gebruikt in de vorige formules, is het resultaat als volgt:
Niet-blad_Niveaus = 1 + log(25) (1000 / 25) = 3
Num_Index_Pages = 1000/(25^3)+ 1000/(25^2) + 1000/(25^1) = 1 + 2 + 40 = 43, wat het aantal pagina's is dat in het voorbeeld wordt beschreven.
De grootte van de index berekenen (8192 totaal aantal bytes per pagina):
Index_Space_Used = 8192 x Num_Index_Pages
Stap 3. Totaal van de berekende waarden
Totaal van de waarden die zijn verkregen uit de vorige twee stappen:
Geclusterde indexgrootte (bytes) = Leaf_Space_Used + Index_Space_used
Bij deze berekening wordt niet rekening gehouden met het volgende:
Partitioneren
De ruimteoverhead van partitionering is minimaal, maar complex om te berekenen. Het is niet belangrijk om op te nemen.
Toewijzingspagina's
Er is ten minste één IAM-pagina gebruikt om de pagina's bij te houden die zijn toegewezen aan een heap, maar de ruimteoverhead is minimaal en er is geen algoritme om precies te berekenen hoeveel IAM-pagina's er worden gebruikt.
Grote Object (LOB) waarden
Het algoritme om precies te bepalen hoeveel ruimte wordt gebruikt voor het opslaan van de LOB-gegevenstypen varchar(max), varbinary(max), nvarchar(max), tekst, ntext, xml-en afbeelding waarden complex is. Het is voldoende om alleen de gemiddelde grootte van de VERWACHTE LOB-waarden toe te voegen, te vermenigvuldigen met Num_Rowsen toe te voegen aan de totale geclusterde indexgrootte.
Compressie
U kunt de grootte van een gecomprimeerde index niet vooraf berekenen.
Spaarzame kolommen
Zie Sparsekolommen gebruikenvoor informatie over de ruimtevereisten van sparsekolommen.