Komprimierung von Partitionen

Datenbanken wachsen. Wenn der Speicherplatz knapp wird, können einzelne Tabellen komprimiert werden, jedoch sollte dies mit Vorsicht angegangen werden, denn wenn hoch frequentierte Tabellen komprimiert werden, kostet das unnötig Zeit und CPU Ressourcen. Daher sollte diese Technologie eher bei partitionierten Tabellen zum Einsatz gebracht werden, wenn man ältere und nicht häufig verwendete Daten von den aktuellen differenziert werden können. Die Partitionen können dann durch die Zeilen/Seiten Komprimierung des SQL Servers komprimiert werden.

Hinweis:
Dieser Artikel bezieht sich auf die folgende Artikel in den Beispielen:
Patritionierung von bestehenden Tabellen
Partitionierung von SQL Server Tabellen

Nimmt man das Beispiel „Patritionierung von bestehenden Tabellen“ als Grundlage und fügt dort weitere Daten ein (pro Partition 2000 Zeilen):
DECLARE @counter INT = 9
WHILE @counter < 10000
BEGIN
INSERT INTO dbo.buchungen (uid, name, datum, wert) VALUES (@counter, 'Januar 2008', '20080308', '100');
INSERT INTO dbo.buchungen_Log (uid, buchungen_uid) VALUES (@counter, @counter);
SET @counter = @counter + 1
INSERT INTO dbo.buchungen (uid, name, datum, wert) VALUES (@counter, 'März 2009', '20090308', '100');
INSERT INTO dbo.buchungen_Log (uid, buchungen_uid) VALUES (@counter, @counter);
SET @counter = @counter + 1
INSERT INTO dbo.buchungen (uid, name, datum, wert) VALUES (@counter, 'Februar 2010', '20100209', '100');
INSERT INTO dbo.buchungen_Log (uid, buchungen_uid) VALUES (@counter, @counter);
SET @counter = @counter + 1
INSERT INTO dbo.buchungen (uid, name, datum, wert) VALUES (@counter, 'Januar 2011', '20110120', '100');
INSERT INTO dbo.buchungen_Log (uid, buchungen_uid) VALUES (@counter, @counter);
SET @counter = @counter + 1
INSERT INTO dbo.buchungen (uid, name, datum, wert) VALUES (@counter, 'Januar 2012', '20120115', '300');
INSERT INTO dbo.buchungen_Log (uid, buchungen_uid) VALUES (@counter, @counter);
SET @counter = @counter + 1
END

Nun ergibt sich folgende Speicherbelegung (SQL Server Bericht, Speicherbelegung durch Partitionen):

Wenn nun die Partitionen durch folgendes Statement komprimiert werden …
ALTER TABLE [dbo].[buchungen] REBUILD PARTITION = 1 WITH(DATA_COMPRESSION = ROW )
ALTER TABLE [dbo].[buchungen] REBUILD PARTITION = 2 WITH(DATA_COMPRESSION = ROW )
ALTER TABLE [dbo].[buchungen] REBUILD PARTITION = 3 WITH(DATA_COMPRESSION = ROW )
ALTER TABLE [dbo].[buchungen] REBUILD PARTITION = 5 WITH(DATA_COMPRESSION = ROW )

… ergibt sich folgendes Bild:

Gesamt ergibt das in diesem Beispiel ~100 KB an Speicherplatz-Gewinn. Die Komprimierung kann auch hervorragend durch den Assistenten des SMSS durchgeführt werden.

Schreibe einen Kommentar