Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Komprimieren einer bestimmten Partition innerhalb einer Tabelle in SQL Server (T-SQL)

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                    |
+--------------------+--------------------+-------------------------+