Einführung: SQLServer2005SP2 bringt uns die vardecimal-Funktion. Mit dieser Funktion können die ursprünglichen Dezimaldaten fester Länge in der Datendatei gespeichert werden. Es wird gesagt, dass diese Funktion Platz für das Data Warehouse sparen kann, und SQLServer2008 ist es auch Darauf aufbauend wurde die Datenkomprimierungsfunktion erweitert.
Die Datenkomprimierungsfunktion in SQL Server wurde erstmals in SQL Server 2005 eingeführt. Den Enterprise- und Development-Editionen wurde ein neues Speicherformat namens vardecimal hinzugefügt. Diese Funktion kann sich auf dezimale und numerische Felder auswirken. Wenn die Tabellen in der Datenbank dezimale und numerische Daten enthalten, können Benutzer das vardecimal-Speicherformat verwenden, um die Größe der Datenbank zu reduzieren. Es ist zu beachten, dass die Menge an Speicherplatz, die eingespart werden kann, davon abhängt, wie viele dezimale oder numerische Datenspalten die Datenbank enthält, von der Verteilung der Daten und von der Größe der Tabelle.
Verwenden Sie Datenkomprimierung
Es ist diese Datenkomprimierungsfunktion, die zu einer weiteren neuen Funktion in SQL Server 2008 geworden ist: Datenkomprimierung. Mit dieser Funktion können Sie die Größe von Teilmengen von Datentabellen, Indizes und Partitionen reduzieren. Aber warum sollte diese Funktion, die zuvor in SQL Server 2005 vorhanden war, in der neuen Generation des Systems verbessert werden? Welche Vorteile kann die Datenkomprimierungstechnologie in einem Marktumfeld mit ständig sinkenden Speicherkosten für Unternehmen bringen?
Obwohl die Speicherkosten kein sensibler Faktor mehr sind, auf den Unternehmen achten, bedeutet dies nicht, dass die Datenbankgröße keinen Einfluss auf die Effizienz des Unternehmensbetriebs hat, da die Datenbankgröße nicht nur die Speicherkosten beeinflusst, sondern auch stark mit der Verwaltung zusammenhängt Kosten- und Leistungsprobleme.
Erstens ist die Sicherungszeit umso länger, da die Datenbank gesichert werden muss, und die Kosten für die Sicherungshardware steigen. Ein weiterer Verwaltungsaufwand sind die Wartungskosten der Datenbank. Wenn SQL Server die Festplatte scannt, um Daten zu lesen, werden die Daten in Einheiten von Datenseiten gelesen. Je mehr Datenzeilen eine Datenseite enthält, desto mehr Daten erhält SQL Server auf einer Datenseite mehr sein, was auch zu Leistungsverbesserungen führen wird.
Im Vergleich zu den vardezimal komprimierten Daten in SQL Server2005SP2 verwenden die derzeit von SQLServer2008 veröffentlichten Testdaten eine neue Datenkomprimierungstechnologie, um eine höhere Speicherrate zu erreichen, gepaart mit mehr Speicherplatz für die Notfallwiederherstellung durch Unternehmen. All dies bietet SQLServer2008 Vorteile diese neue Funktion.
Seite 2: Zwei Komprimierungsmodi
Nachdem Sie die tatsächlichen Vorteile der Datenkomprimierung verstanden haben, können Sie die Durchdringung des Konzepts spüren. Mit Hilfe der Datenkomprimierung werden die Speicherkosten gesenkt, die Abfrageleistung verbessert, die E/A reduziert und die Pufferungsklickraten erhöht. Es ist ersichtlich, dass diese Funktion im Anwendungsprozess immer noch sehr effektiv ist. Es gibt zwei Anwendungsmethoden für die Datenkomprimierung in SQL Server 2008, nämlich Zeilenkomprimierung und Seitenkomprimierung. Hier ein kurzer Vergleich dieser beiden Datenkomprimierungsarten.
Auswahl des Komprimierungstyps während des Datenkomprimierungs-Assistenten
Zeilenkomprimierung. Durch die Zeilenkomprimierung können Typen fester Länge als Speichertypen variabler Länge gespeichert werden. Beispielsweise verwendet eine char(100)-Spalte, die in einem Speicherformat mit variabler Länge gespeichert ist, nur die Daten, die durch die Speichermenge definiert sind. Der gespeicherte „SQLServer2008“ muss nach der Komprimierung nur 15 Zeichen statt aller 100 Zeichen speichern und spart so 85 % Speicherplatz. Dies ist eine Erweiterung der Idee des vardezimalen Speicherformats, das in SQLServer2005ServicePack2 bereitgestellt wird. Es ist auch zu beachten, dass dieser Komprimierungsmodus NULL- und 0-Werte aller Datentypen optimiert, sodass diese keine Bytes belegen.
Obwohl die SQLServer2008-Datenkomprimierung diese Funktionalität erweitert, werden alle Datentypen fester Länge verarbeitet, einschließlich Ganzzahl, Zeichen und Gleitkomma. Jetzt werden Daten nicht in Bytes fester Größe gespeichert, sondern in den minimal erforderlichen Bytes, was einfach durch Aktivieren der Zeilenkomprimierung durchgeführt werden kann. Allerdings kann die Zeilenkomprimierung die Datentypen XML, BLOB und MAX nicht verarbeiten.
Seitenkomprimierungsmodus. Diese auf der Zeilenkomprimierung basierende Komprimierungsfunktion minimiert gespeicherte redundante Daten, indem dieselben Ereignisbytes nur einmal auf einer Seite gespeichert werden. Tabellen und Indizes werden mithilfe der Seitenkomprimierung komprimiert. Zusätzlich zur Zeilenkomprimierung werden auch Präfixkomprimierung und Wörterbuchkomprimierung verwendet.
Durch die Datenkomprimierung wird die Größe Ihrer Tabellen- oder Indexmetriken verringert. Am besten bewerten Sie zunächst die Platzeinsparungen nach der Komprimierung. Jede Seite wird einzeln komprimiert und auch Präfixe und Wörterbücher werden auf der Seite gespeichert. Da eine Seite die atomare Einheit der Speicherzuweisung ist, macht es keinen Sinn, eine halbe Seite in eine Viertelseite zu komprimieren. Daher beginnt der Komprimierungsprozess erst, wenn der Seiteninhalt fast voll ist.
Bei der Verwendung der Zeilen- und Seitenkomprimierung gibt es auch einen Leistungskompromiss, da die CPU-Auslastung steigt, die I/O-Auslastung und der Speicherbedarf jedoch sinken. Alle Komprimierungsoptionen können jedoch zu exklusiven Optionen für SQLServer2008 Enterprise Edition werden.
Seite 3: So verwenden Sie die Datenkomprimierung
Anhang (Anleitung zur Datenkomprimierung):
(1) Zeilenkomprimierung aktivieren
Wenn wir die Zeilenkomprimierung für eine bestimmte Tabelle aktivieren möchten, können wir die folgende Anweisung ausführen:
TABELLE ERSTELLEN Alpha(col1 int,col2 char(1000))
WITH (DATA_COMPRESSION = ROW)
(2) Aktivieren Sie die Seitenkomprimierung
Wenn wir die Komprimierung auf einer bestimmten Partition aktivieren möchten, können wir die folgende Anweisung ausführen:
TABELLE ERSTELLEN Alpha_Partition(col1 int,col2 char(1000))
ONPartitionScheme (Spalte 1)
MIT
(DATA_COMPRESSION = PAGE ON)
PARTITIONEN (1-3)
(3)Ändern Sie die Komprimierung
Wenn Sie einen vorhandenen Index ändern möchten, um die Komprimierung zu verwenden, führen Sie die folgende Anweisung aus:
ALTER INDEX Collndx ON Alpha REBUILD
WITH (DATA_C0MPRESSION=PAGE)
ALTER INDEX Collndx ON Alpha REBUILD
Partition=2
WITH (DATA_COMPRESSION=PAGE)
Komprimierungsoptionen in SQL Server 2008 können beim Erstellen einer Tabelle oder eines Index über Option festgelegt werden, zum Beispiel:
CREATE TABLE TestTable (col1 int,col2varchar(200))WITH(DATA_COMPRESSION = ROW);
Wenn Sie die Komprimierungsoptionen einer Partition ändern müssen, können Sie die folgende Anweisung verwenden:
ALTER TABLE TestTable REBUILD PARTITION = 1 WITH(DATACOMPRESSION=PAGE);
Wenn Sie für jede Partition der partitionierten Tabelle unterschiedliche Komprimierungsoptionen festlegen müssen, können Sie die folgende Anweisung verwenden: (SQLServer2008 kann unterschiedliche Komprimierungsoptionen für verschiedene Partitionen verwenden. Dies ist für Data Warehouse-Anwendungen sehr wichtig, da die Faktentabelle des Data Warehouse Normalerweise gibt es eine oder mehrere Hot-Partitionen, und die Daten in diesen Partitionen müssen häufig aktualisiert werden. Um zu vermeiden, dass die Datenkomprimierung zusätzliche Verarbeitungslast für Datenaktualisierungen auf diesen Partitionen mit sich bringt, können Sie die Komprimierungsoption für diese Partitionen deaktivieren.
TABELLE ERSTELLEN PartitionedTable (col1 int, col2varchar(200))
AUF PS1 (col1)
WITH (DATA_COMPRESSION = ROW ON PARTITIONS(1),
DATA_COMPRESSION = PAGE ON PARTITION(2 TO 4));
Wenn Sie Komprimierungsoptionen für einen Index festlegen, können Sie Folgendes verwenden:
CREATE INDEX IX_TestTable_Col1 ONTestTable(Col1)WITH(DATA_COMPRESSION = ROW);
Wenn Sie die Komprimierungsoptionen eines Index ändern möchten, können Sie Folgendes verwenden:
ALTER INDEX IX_TestTable_Col1 ONTestTableREBUILDWITH(DATA_COMPRESSION = ROW);