Freigeben über


Schätzen der Größe eines Heaps

Mit den folgenden Schritten können Sie den Umfang des Speicherplatzes schätzen, der zum Speichern von Daten in einem Heap erforderlich ist:

  1. Geben Sie die Anzahl der Zeilen an, die die Tabelle enthalten wird:

    Num_Rows = Anzahl der Zeilen in der Tabelle

  2. Geben Sie die Anzahl der Spalten mit fester und mit variabler Länge an, und berechnen Sie den Speicherplatz, der für deren Speicherung erforderlich ist:

    Berechnen Sie den Speicherplatz, der zum Speichern jeder dieser Spaltengruppen innerhalb der Datenzeile erforderlich ist. Die Größe einer Spalte hängt von der Angabe für Datentyp und -länge ab. Weitere Informationen finden Sie unter Datentypen (Datenbankmodul).

    Num_Cols = Gesamtanzahl der Spalten (fester Länge und variabler Länge)

    Fixed_Data_Size = Gesamtanzahl der Bytes in allen Spalten fester Länge

    Num_Variable_Cols = Anzahl der Spalten variabler Länge

    Max_Var_Size = Maximale Gesamtanzahl der Bytes in allen Spalten variabler Länge

  3. Ein Teil der Zeile, der als NULL-Bitmuster (Null_Bitmap) bezeichnet wird, wird für das Verwalten der NULL-Zulässigkeit der Spalte reserviert. Berechnen Sie dessen Größe:

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

    Nur der ganzzahlige Teil dieses Ausdrucks darf verwendet werden. Der Rest wird verworfen.

  4. Berechnen Sie die Größe der Daten variabler Länge:

    Wenn die Tabelle Spalten variabler Länge enthält, müssen Sie den Speicherplatz ermitteln, der von den Spalten innerhalb 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 der Nachverfolgung jeder Spalte variabler Länge. Bei dieser Formel wird angenommen, dass alle Spalten variabler Länge zu 100 % gefüllt sind. Wenn sich abzeichnet, dass ein niedrigerer Prozentsatz des Speicherplatzes für Spalten variabler Länge verwendet wird, können Sie den ***Max\_Var\_Size***-Wert um diesen Prozentsatz anpassen, um einen genaueren Schätzwert für die Gesamtgröße der Tabelle zu erhalten.

<div class="alert">

<table>
<colgroup>
<col style="width: 100%" />
</colgroup>
<thead>
<tr class="header">
<th><img src="images/ms173548.alert_note(de-de,SQL.100).gif" title="Hinweis" alt="Hinweis" class="note" /><strong>Hinweis</strong></th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><p>Sie können varchar-, nvarchar-, varbinary- oder sql_variant-Spalten kombinieren, mit dem Ergebnis, dass die definierte Tabellengesamtbreite größer als 8.060 Byte ist. Die Länge jeder einzelnen Spalte unterliegt auch weiterhin der Beschränkung von 8.000 Byte für eine varchar-, nvarchar,- varbinary- oder sql_variant-Spalte. Die kombinierte Breite kann jedoch den Grenzwert von 8.060 Byte in einer Tabelle überschreiten. Weitere Informationen finden Sie unter <a href="ms186981(v=sql.100).md">Zeilenüberlauf bei Daten über 8 KB</a>.</p></td>
</tr>
</tbody>
</table>

</div>

Wenn keine Spalten variabler Länge vorhanden sind, legen Sie ***Variable\_Data\_Size*** auf 0 fest.
  1. Berechnen Sie die Gesamtzeilenlänge:

    Row_Size = Fixed_Data_Size + Variable_Data_Size + Null_Bitmap + 4

    Der Wert 4 in der Formel ist der Zeilenüberschriftenaufwand der Datenzeile.

  2. Berechnen Sie die Anzahl der Zeilen pro Seite (8.096 freie Byte pro Seite):

    Rows_Per_Page = 8096 / (Row_Size + 2)

    Da sich eine Zeile nicht auf zwei Seiten erstreckt, muss die Anzahl der Zeilen pro Seite auf die nächste ganze Zeile abgerundet werden. Die Angabe 2 in der Formel bezieht sich auf den Eingang der Zeile in das Slotarray der Seite.

  3. Berechnen Sie die Anzahl der Seiten, die zum Speichern aller Zeilen benötigt werden:

Num_Pages* = Num_Rows / *Rows_Per_Page

Die geschätzte Seitenanzahl muss auf die nächste ganze Seite aufgerundet werden.
  1. Berechnen Sie den Umfang des Speicherplatzes, der zum Speichern der Daten im Heap erforderlich ist (insgesamt 8.192 Byte pro Seite):

    Heapgröße (Bytes) = 8192 x Num_Pages

In dieser Berechnung wird Folgendes nicht berücksichtigt:

  • Partitionierung

    Der Speicherplatzaufwand aus der Partitionierung ist geringfügig, seine Berechnung jedoch komplex. Er muss nicht berücksichtigt werden.

  • Zuordnungsseiten

    Mindestens eine IAM-Seite wird zum Nachverfolgen der für einen Heap zugeordneten Seiten verwendet, der Speicherplatzaufwand ist jedoch nur minimal. Außerdem ist kein Algorithmus verfügbar, um deterministisch genau zu berechnen, wie viele IAM-Seiten verwendet werden.

  • LOB-Werte (Large Object)

    Der Algorithmus zum Berechnen des genauen Speicherplatzes, der zum Speichern der Werte der LOB-Datentypen varchar(max), varbinary(max), nvarchar(max), text, ntextxml und image erforderlich ist, ist komplex. Es reicht aus, lediglich die Durchschnittsgröße der erwarteten LOB-Werte zu addieren und diesen Wert zur Gesamtgröße des Heaps zu addieren.

  • Komprimierung

    Sie können die Größe eines komprimierten Heaps nicht im Voraus berechnen.