Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Mit den folgenden Schritten können Sie den Speicherplatz schätzen, der zum Speichern von Daten in einem gruppierten Index erforderlich ist:
Berechnen Sie den Platz, der zum Speichern von Daten auf der Blattebene des gruppierten Indexes verwendet wird.
Berechnen Sie den Zum Speichern von Indexinformationen für den gruppierten Index verwendeten Speicherplatz.
Summe der berechneten Werte.
Schritt 1. Berechnen des zum Speichern von Daten in der Blattebene verwendeten Platz
Geben Sie die Anzahl der Zeilen an, die in der Tabelle vorhanden sein werden:
Num_Rows = Anzahl der Zeilen in der Tabelle
Geben Sie die Anzahl der Spalten mit der festen und variablen Länge an und berechnen Sie den erforderlichen Speicherplatz für deren Speicherung.
Berechnen Sie den Abstand, den jede dieser Spaltengruppen innerhalb der Datenzeile einnimmt. Die Größe einer Spalte hängt vom Datentyp und der Längenangabe ab.
Num_Cols = Gesamtanzahl der Spalten (feste Länge und variable Länge)
Fixed_Data_Size = Gesamtbytegröße aller Spalten mit fester Länge
Num_Variable_Cols = Anzahl der Spalten mit variabler Länge
Max_Var_Size = maximale Bytegröße aller Spalten mit variabler Länge
Wenn der gruppierte Index nicht eindeutig ist, müssen Sie die Eindeutigerspalte berücksichtigen:
Das Eindeutigkeitsmerkmal ist eine nullfähige Spalte mit variabler Länge. Es wird nicht-null sein und eine Größe von 4 Bytes haben in Zeilen mit nicht eindeutigen Schlüsselwerten. Dieser Wert ist Teil des Indexschlüssels und ist erforderlich, um sicherzustellen, dass jede Zeile einen eindeutigen Schlüsselwert aufweist.
Num_Cols = Num_Cols + 1
Num_Variable_Cols = Num_Variable_Cols + 1
Max_Var_Size = Max_Var_Size + 4
Bei diesen Änderungen wird davon ausgegangen, dass alle Werte nicht ununique sind.
Ein Teil der Zeile, der als NULL-Bitmap bezeichnet wird, ist für die Verwaltung der Spalten-Nullfähigkeit reserviert. Berechnen der Größe:
Null_Bitmap = 2 + ((Num_Cols + 7) / 8)
Es sollte nur der ganzzahlige Teil des vorherigen Ausdrucks verwendet werden; verwerfen Sie alle Restlichen.
Berechnen der Datengröße variabler Länge:
Wenn in der Tabelle Spalten mit variabler Länge vorhanden sind, bestimmen Sie, wie viel Platz zum Speichern der Spalten in der Zeile verwendet wird:
Variable_Data_Size = 2 + (Num_Variable_Cols x 2) + Max_Var_Size
Die zu Max_Var_Size hinzugefügten Bytes dienen zum Nachverfolgen jeder einzelnen Variablenspalte. Bei dieser Formel wird davon ausgegangen, dass alle Spalten mit variabler Länge 100 Prozent voll sind. Wenn Sie davon ausgehen, dass ein kleinerer Prozentsatz des Speicherplatzes für spaltenvariable Spalten verwendet wird, können Sie den Max_Var_Size Wert um diesen Prozentsatz anpassen, um eine genauere Schätzung der Gesamttabellengröße zu erzielen.
Hinweis
Sie können
varchar,nvarchar,varbinaryodersql_variantSpalten kombinieren, die dazu führen, dass die gesamte definierte Tabellenbreite 8.060 Bytes überschreitet. Die Länge jeder dieser Spalten muss weiterhin innerhalb des Grenzwerts von 8.000 Bytes für einevarchar,varbinaryodersql_variantSpalte und 4.000 Bytes für einenvarcharSpalte liegen. Ihre kombinierten Breiten können jedoch den Grenzwert von 8.060 Byte in einer Tabelle überschreiten.Wenn keine Spalten mit variabler Länge vorhanden sind, legen Sie Variable_Data_Size auf 0 fest.
Berechnen der Gesamtzeilengröße:
= Row_Size + Fixed_Data_Size + Variable_Data_SizeNull_Bitmap + 4
Der Wert 4 stellt den Overhead des Zeilenkopfs einer Datenzeile dar.
Berechnen sie die Anzahl der Zeilen pro Seite (8096 freie Bytes pro Seite):
Rows_Per_Page = 8096 / (Row_Size + 2)
Da Zeilen keine Seiten umfassen, sollte die Anzahl der Zeilen pro Seite auf die nächste ganze Zeile abgerundet werden. Der Wert 2 in der Formel steht für den Eintrag der Zeile im Slot-Array der Seite.
Berechnen Sie die Anzahl der reservierten freien Zeilen pro Seite basierend auf dem angegebenen Füllfaktor :
Free_Rows_Per_Page = 8096 x ((100 - Fill_Factor) / 100) / (Row_Size + 2)
Der in der Berechnung verwendete Füllfaktor ist ein ganzzahliger Wert anstelle eines Prozentsatzes. Da Zeilen keine Seiten umfassen, sollte die Anzahl der Zeilen pro Seite auf die nächste ganze Zeile abgerundet werden. Wenn der Füllfaktor wächst, werden mehr Daten auf jeder Seite gespeichert, und es werden weniger Seiten vorhanden sein. Der Wert 2 in der Formel steht für den Eintrag der Zeile im Slot-Array der Seite.
Berechnen Sie die Anzahl der Seiten, die zum Speichern aller Zeilen erforderlich sind:
Num_Leaf_Pages = Num_Rows / (Rows_Per_Page - Free_Rows_Per_Page)
Die Anzahl der geschätzten Seiten sollte auf die nächste ganze Seite aufgerundet werden.
Berechnen Sie den Speicherplatz, der zum Speichern der Daten auf der Blattebene erforderlich ist (8192 Bytes pro Seite):
Leaf_space_used = 8192 x Num_Leaf_Pages
Schritt 2. Berechnen des zum Speichern von Indexinformationen verwendeten Speicherplatzes
Mit den folgenden Schritten können Sie den Speicherplatz schätzen, der erforderlich ist, um die oberen Ebenen des Indexes zu speichern:
Geben Sie die Anzahl der Spalten mit fester Länge und variabler Länge im Indexschlüssel an, und berechnen Sie den erforderlichen Speicherplatz.
Die Schlüsselspalten eines Indexes können Spalten mit fester Länge und Variabler Länge enthalten. Um die Indexzeilengröße auf Innenebene zu schätzen, berechnen Sie den Abstand, den jede dieser Spaltengruppen innerhalb der Indexzeile einnimmt. Die Größe einer Spalte hängt vom Datentyp und der Längenangabe ab.
Num_Key_Cols = Gesamtanzahl der Schlüsselspalten (feste Länge und variable Länge)
Fixed_Key_Size = Gesamtbytegröße aller Schlüsselspalten mit fester Länge
Num_Variable_Key_Cols = Anzahl der Schlüsselspalten variabler Länge
Max_Var_Key_Size = maximale Bytegröße aller Spalten mit variabler Länge
Berücksichtigen Sie jede erforderliche Eindeutigkeitsersteller, wenn der Index nicht eindeutig ist.
Das Eindeutigkeitsmerkmal ist eine nullfähige Spalte mit variabler Länge. Es wird nicht null sein und 4 Byte in Zeilen mit nicht eindeutige Indexschlüsselwerten haben. Dieser Wert ist Teil des Indexschlüssels und ist erforderlich, um sicherzustellen, dass jede Zeile einen eindeutigen Schlüsselwert aufweist.
= Num_Key_ColsNum_Key_Cols + 1
= Num_Variable_Key_ColsNum_Variable_Key_Cols + 1
Max_Var_Key_Size = Max_Var_Key_Size + 4
Bei diesen Änderungen wird davon ausgegangen, dass alle Werte nicht ununique sind.
Berechnen sie die Null-Bitmapgröße:
Wenn im Indexschlüssel NULL-Spalten vorhanden sind, ist ein Teil der Indexzeile für die NULL-Bitmap reserviert. Berechnen der Größe:
Index_Null_Bitmap = 2 + ((Anzahl der Spalten in der Indexzeile + 7) / 8)
Es sollte nur der ganzzahlige Teil des vorherigen Ausdrucks verwendet werden. Verwerfen Sie alle Restlichen.
Wenn keine Null-Schlüsselspalten vorhanden sind, legen Sie Index_Null_Bitmap auf 0 fest.
Berechnen der Datengröße variabler Länge:
Wenn im Index Spalten mit variabler Länge vorhanden sind, bestimmen Sie, wie viel Platz zum Speichern der Spalten in der Indexzeile verwendet wird:
Variable_Key_Size = 2 + (Num_Variable_Key_Cols x 2) + Max_Var_Key_Size
Die zu Max_Var_Key_Size hinzugefügten Bytes dienen zum Nachverfolgen jeder Spalte mit variabler Länge. Bei dieser Formel wird davon ausgegangen, dass alle Spalten mit variabler Länge 100 Prozent voll sind. Wenn Sie davon ausgehen, dass ein kleinerer Prozentsatz des Speicherplatzes für spaltenvariable Spalten verwendet wird, können Sie den Max_Var_Key_Size Wert um diesen Prozentsatz anpassen, um eine genauere Schätzung der Gesamttabellengröße zu erzielen.
Wenn keine Spalten mit variabler Länge vorhanden sind, legen Sie Variable_Key_Size auf 0 fest.
Berechnen der Indexzeilengröße:
Index_zeilengröße = Feste_Schlüsselgröße + Variable_Schlüsselgröße + Index_Null_Bitmap + 1 (für den Kopf einer Indexzeile) + 6 (für den Verweis auf die untergeordnete Seiten-ID)
Berechnen sie die Anzahl der Indexzeilen pro Seite (8096 freie Bytes pro Seite):
Index_Rows_Per_Page = 8096 / (Index_Row_Size + 2)
Da Indexzeilen keine Seiten umfassen, sollte die Anzahl der Indexzeilen pro Seite auf die nächste ganze Zeile abgerundet werden. Die 2 in der Formel bezieht sich auf den Eintrag der Zeile im Slot-Array der Seite.
Berechnen Sie die Anzahl der Ebenen im Index:
Nicht-Blatt_Ebenen = 1 + Logarithmus Index_Rows_Per_Page (Num_Leaf_Pages / Index_Rows_Per_Page)
Rundet diesen Wert auf die nächste ganze Zahl auf. Dieser Wert enthält nicht die Blattebene des gruppierten Indexes.
Berechnen Sie die Anzahl der nicht blattfreien Seiten im Index:
Num_Index_Pages = ∑Level (Num_Leaf_Pages / (Index_Rows_Per_PageLevel))
wobei 1 <= Ebene <= Nicht-Blatt_Ebenen
Runden Sie jede Summe auf die nächste ganze Zahl auf. Betrachten Sie als einfaches Beispiel einen Index, in dem Num_Leaf_Pages = 1000 und Index_Rows_Per_Page = 25. Die erste Indexebene über der Blattebene speichert 1000 Indexzeilen, also eine Indexzeile pro Blattseite, und 25 Indexzeilen können pro Seite passen. Dies bedeutet, dass 40 Seiten erforderlich sind, um diese 1000 Indexzeilen zu speichern. Die nächste Ebene des Indexes muss 40 Zeilen speichern. Dies bedeutet, dass es 2 Seiten erfordert. Die letzte Ebene des Indexes muss 2 Zeilen speichern. Dies bedeutet, dass es 1 Seite erfordert. Dadurch werden 43 nicht blattfreie Indexseiten angezeigt. Wenn diese Zahlen in den vorherigen Formeln verwendet werden, lautet das Ergebnis wie folgt:
Nicht-leaf_Levels = 1 + log25 (1000 / 25) = 3
Num_Index_Pages = 1000/(253)+ 1000/(252) + 1000/(251) = 1 + 2 + 40 = 43, also die Anzahl der im Beispiel beschriebenen Seiten.
Berechnen der Größe des Indexes (8192 Byte pro Seite):
Index_Space_Used = 8192 x Num_Index_Pages
Schritt 3. Summe der berechneten Werte
Summe der werte, die aus den vorherigen beiden Schritten abgerufen wurden:
Gruppierte Indexgröße (Bytes) = Leaf_Space_Used + Index_Space_used
Bei dieser Berechnung wird Folgendes nicht berücksichtigt:
Partitionierung
Der Speicherplatzaufwand bei der Partitionierung ist minimal, aber komplex zu berechnen. Es ist nicht wichtig, einzuschließen.
Zuordnungsseiten
Es gibt mindestens eine IAM-Seite, um die einem Heap zugeordneten Seiten nachzuverfolgen, aber der Platzaufwand ist minimal und es gibt keinen Algorithmus, um genau zu berechnen, wie viele IAM-Seiten verwendet werden.
Werte für große Objekte (LOB)
Der Algorithmus, um genau zu bestimmen, wie viel Speicherplatz verwendet wird, um die LOB-Datentypen
varchar(max), ,varbinary(max),nvarchar(max),text,ntext,xmlundimageWerte zu speichern ist komplex. Es reicht aus, nur die durchschnittliche Größe der erwarteten LOB-Werte hinzuzufügen, mit Num_Rows zu multiplizieren und diese der Gesamtgröße des gruppierten Indexes hinzuzufügen.Komprimierung
Sie können die Größe eines komprimierten Indexes nicht vorab berechnen.
Sparsespalten
Informationen zu den Platzanforderungen von Spalten mit geringem Abstand finden Sie unter Verwenden von Spalten mit sparse.for information about the space requirements of sparse columns, see Use Sparse Columns.
Siehe auch
Beschreibung von gruppierten und nicht gruppierten Indizes
Schätzen der Größe einer Tabelle
Erstellen von gruppierten Indizes
Erstellen nicht gruppierter Indizes
Schätzen der Größe eines nicht gruppierten Indexes
Schätzen der Größe eines Heaps
Schätzen der Größe einer Datenbank