Implementierung der Seitenkomprimierung

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed Instance

In diesem Artikel wird zusammengefasst, wie das Datenbankmodul die Seitenkomprimierung implementiert. Diese Zusammenfassung enthält grundlegende Informationen, die Ihnen bei der Planung des Speicherplatzes helfen, den Sie für Ihre Daten benötigten.

Die Seitenkomprimierung ist für Tabellen, Tabellenpartitionen, Indizes und Indexpartitionen ähnlich. Die folgende Beschreibung der Seitenkomprimierung für eine Tabelle gilt gleichermaßen für die Seitenkomprimierung aller Objekttypen. In den folgenden Beispielen werden Zeichenfolgen komprimiert, jedoch werden dieselben Prinzipien von der Präfix- und Wörterbuchkomprimierung auch auf andere Datentypen angewendet.

Das Komprimieren der Blattebene von Tabellen und Indizes mit der Seitenkomprimierung besteht aus drei Vorgängen, die in der folgenden Reihenfolge ausgeführt werden:

  1. Zeilenkomprimierung
  2. Präfixkomprimierung
  3. Wörterbuchkomprimierung

Wenn Sie Seitenkomprimierung verwenden, werden Seiten auf Nichtblattebene von Indizes lediglich mit der Zeilenkomprimierung komprimiert. Weitere Informationen zur Zeilenkomprimierung finden Sie unter Implementierung der Zeilenkomprimierung.

Präfixkomprimierung

Für jede Seite, die komprimiert wird, verwendet die Präfixkomprimierung die folgenden Schritte:

  1. Für jede Spalte wird ein Wert identifiziert, mit dem der Speicherplatz für die Werte in jeder Spalte verringert werden kann.

  2. Es wird eine Zeile, die die Präfixwerte für jede Spalte darstellt, erstellt und in der CI-Struktur (Compression Information) gespeichert, die unmittelbar auf den Seitenkopf folgt.

  3. Die wiederholten Präfixwerte in der Spalte werden von einem Verweis auf das entsprechende Präfix ersetzt. Wenn der Wert in einer Zeile nicht exakt mit dem ausgewählten Präfixwert übereinstimmt, kann weiterhin eine partielle Übereinstimmung angegeben werden.

Die folgende Abbildung zeigt eine Beispielseite einer Tabelle vor der Präfixkomprimierung.

Diagram of page before prefix compression.

Die folgende Abbildung zeigt dieselbe Seite nach der Präfixkomprimierung. Das Präfix wird in die Kopfzeile verschoben, und die Spaltenwerte werden in Verweise auf das Präfix geändert.

Diagram of page after prefix compression.

In der ersten Spalte der ersten Zeile gibt der Wert 4b an, dass die ersten vier Zeichen des Präfixes (aaab) für diese Zeile und auch das Zeichen bvorhanden sind. Dies macht den resultierenden Wert aaabb, der der ursprüngliche Wert ist.

Wörterbuchkomprimierung

Nach dem Abschluss der Präfixkomprimierung wird die Wörterbuchkomprimierung angewendet. Die Wörterbuchkomprimierung sucht nach wiederholten Werten auf der Seite und speichert diese im CI-Bereich. Im Gegensatz zur Präfixkomprimierung ist die Wörterbuchkomprimierung nicht auf eine Spalte beschränkt. Die Wörterbuchkomprimierung kann wiederholte Werte ersetzen, die an einer beliebigen Stelle auf einer Seite auftreten. Die folgende Abbildung zeigt dieselbe Seite nach der Wörterbuchkomprimierung.

Diagram of page after dictionary compression.

Auf den Wert 4b wurde aus verschiedenen Spalten der Seite verwiesen.

Wenn die Seitenkomprimierung auftritt

Wenn eine neue Tabelle mit Seitenkomprimierung erstellt wird, tritt keine Komprimierung auf. Die Metadaten für die Tabelle geben jedoch an, dass Seitenkomprimierung verwendet werden sollte. Wenn Sie auf der ersten Datenseite Daten hinzufügen, wird Zeilenkomprimierung auf die Daten angewendet. Da die Seite nicht voll ist, wird kein Vorteil von der Seitenkomprimierung gewonnen. Wenn die Seite voll ist, löst die nächste Zeile, die hinzugefügt wird, den Seitenkomprimierungsvorgang aus. Die gesamte Seite wird überprüft. Jede Spalte wird für die Präfixkomprimierung bewertet, und anschließend werden alle Spalten für die Wörterbuchkomprimierung bewertet. Wenn die Seitenkomprimierung genügend Platz auf der Seite für eine zusätzliche Zeile erstellt hat, wird die Zeile hinzugefügt, und die Daten werden sowohl zeilenkomprimiert als auch seitenkomprimiert. Wenn der durch die Seitenkomprimierung gewonnene Platz abzüglich des für die CI-Struktur erforderlichen Platzes nicht signifikant ist, wird die Seitenkomprimierung für diese Seite nicht verwendet. Zukünftige Zeilen passen entweder auf die neue Seite, oder wenn sie nicht passen, wird der Tabelle eine neue Seite hinzugefügt. Ähnlich wie bei der ersten Seite ist die neue Seite nicht bei der ersten Seite komprimiert.

Wenn auf eine vorhandene Tabelle, die Daten enthält, Seitenkomprimierung angewendet wird, wird jede Seite neu erstellt und bewertet. Das Neuerstellen aller Seiten hat die Neuerstellung der Tabelle, des Indexes oder der Partition zur Folge.

Nächste Schritte