Wenn Sie eine partitionierte Tabelle in SQL Server komprimieren, können Sie alle Partitionen, einige oder nur eine Partition komprimieren.
Verwenden Sie dazu die REBUILD PARTITION
Syntax innerhalb der ALTER TABLE
Erklärung.
Dabei können Sie nur die angegebene Partition oder alle Partitionen neu erstellen. Alternativ können Sie alle Partitionen neu erstellen und dabei nur eine bestimmte Partition oder eine Liste von Partitionen komprimieren.
Beispiel 1 – Eine Partition neu aufbauen
In diesem ersten Beispiel erstellen und komprimieren wir nur eine Partition in der Tabelle.
Komprimierungseinsparungen schätzen
Stellen Sie sich vor, wir möchten eine einzelne Partition in einer Tabelle namens Movies
komprimieren .
Zuerst können wir die sp_estimate_data_compression_savings
verwenden System gespeicherte Prozedur, um die Einsparungen abzuschätzen, die wir durch das Komprimieren der Tabelle erzielen würden.
EXEC sp_estimate_data_compression_savings
@schema_name = 'dbo',
@object_name = 'Movies',
@index_id = NULL,
@partition_number = 3,
@data_compression = 'ROW';
Ergebnis (bei vertikaler Ausgabe):
object_name | Movies schema_name | dbo index_id | 1 partition_number | 3 size_with_current_compression_setting(KB) | 120 size_with_requested_compression_setting(KB) | 88 sample_size_with_current_compression_setting(KB) | 128 sample_size_with_requested_compression_setting(KB) | 96
Gemäß sp_estimate_data_compression_savings
, sollte die Partitionsgröße nach der Komprimierung von 120 KB auf 88 KB reduziert werden.
Partition komprimieren
Lassen Sie uns fortfahren und es komprimieren.
ALTER TABLE Movies
REBUILD PARTITION = 3 WITH (DATA_COMPRESSION = ROW);
In diesem Fall habe ich die Zeilenkomprimierung verwendet.
Überprüfen Sie die Komprimierungseinsparungen
Wenn wir nun sp_estimate_data_compression_savings
abfragen Auch hier werden wir sehen, dass die aktuelle Größe jetzt genau der zuvor geschätzten entspricht (88 KB).
EXEC sp_estimate_data_compression_savings
@schema_name = 'dbo',
@object_name = 'Movies',
@index_id = NULL,
@partition_number = 3,
@data_compression = 'NONE';
Ergebnis (bei vertikaler Ausgabe):
object_name | Movies schema_name | dbo index_id | 1 partition_number | 3 size_with_current_compression_setting(KB) | 88 size_with_requested_compression_setting(KB) | 112 sample_size_with_current_compression_setting(KB) | 96 sample_size_with_requested_compression_setting(KB) | 128
In diesem Beispiel erhalte ich eine Schätzung des Speicherplatzbedarfs, wenn ich die Komprimierung entfernen würde (d. h. sie auf NONE
setzen würde ).
Überprüfen Sie, welche Partitionen Komprimierung verwenden
Wir können auch die sys.partitions
verwenden überprüfen, ob die Partition komprimiert ist.
SELECT
[partition_number],
[data_compression],
[data_compression_desc]
FROM sys.partitions
WHERE object_id = OBJECT_ID('Movies');
Ergebnis:
+--------------------+--------------------+-------------------------+ | partition_number | data_compression | data_compression_desc | |--------------------+--------------------+-------------------------| | 1 | 0 | NONE | | 2 | 0 | NONE | | 4 | 0 | NONE | | 3 | 1 | ROW | +--------------------+--------------------+-------------------------+
Komprimierung entfernen
Bevor wir zu Beispiel 2 übergehen, entfernen wir die Komprimierung von der Partition.
ALTER TABLE Movies
REBUILD PARTITION = 3 WITH (DATA_COMPRESSION = NONE);
Beispiel 2 – Mehrere Partitionen komprimieren
In diesem Beispiel erstellen wir alle Partitionen neu, geben aber nur die Partitionen an, die komprimiert werden sollen.
Dies ist eine alternative Methode zu unserem ersten Beispiel. Mit dieser Syntax können wir eine Liste der zu komprimierenden Partitionen angeben.
ALTER TABLE Movies
REBUILD PARTITION = ALL
WITH (DATA_COMPRESSION = ROW ON PARTITIONS(2,3));
In diesem Fall habe ich alle Partitionen neu erstellt, aber nur die Partitionen 2 und 3 komprimiert.
Auch hier können wir sys.partitions
verwenden um zu überprüfen, ob sie komprimiert wurden.
SELECT
[partition_number],
[data_compression],
[data_compression_desc]
FROM sys.partitions
WHERE object_id = OBJECT_ID('Movies');
Ergebnis:
+--------------------+--------------------+-------------------------+ | partition_number | data_compression | data_compression_desc | |--------------------+--------------------+-------------------------| | 1 | 0 | NONE | | 2 | 1 | ROW | | 3 | 1 | ROW | | 4 | 0 | NONE | +--------------------+--------------------+-------------------------+