Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Comprimere una partizione specifica all'interno di una tabella in SQL Server (T-SQL)

Quando comprimi una tabella partizionata in SQL Server, puoi comprimere tutte le partizioni, alcune o solo una partizione.

Per fare ciò, usa il REBUILD PARTITION sintassi all'interno di ALTER TABLE dichiarazione.

Quando si esegue questa operazione, è possibile ricostruire solo la partizione specificata o tutte le partizioni. In alternativa, puoi ricostruire tutte le partizioni, comprimendo solo una partizione specifica o un elenco di partizioni.

Esempio 1:ricostruire una partizione

In questo primo esempio ricostruiamo e comprimiamo solo una partizione nella tabella.

Stimare i risparmi di compressione

Immagina di voler comprimere una singola partizione in una tabella chiamata Movies .

Per prima cosa, possiamo usare sp_estimate_data_compression_savings stored procedure di sistema per stimare i risparmi che otterremmo dalla compressione della tabella.

EXEC sp_estimate_data_compression_savings 
    @schema_name = 'dbo', 
    @object_name = 'Movies', 
    @index_id = NULL, 
    @partition_number = 3, 
    @data_compression = 'ROW';

Risultato (usando l'output verticale):

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

Secondo sp_estimate_data_compression_savings , la dimensione della partizione dovrebbe ridursi da 120 KB a 88 KB dopo averla compressa.

Comprimi la partizione

Andiamo avanti e comprimilo.

ALTER TABLE Movies
REBUILD PARTITION = 3 WITH (DATA_COMPRESSION = ROW);

In questo caso ho usato la compressione di riga.

Verifica il risparmio di compressione

Ora, se interroghiamo sp_estimate_data_compression_savings di nuovo, vedremo che la dimensione attuale è esattamente quella stimata in precedenza (88 KB).

EXEC sp_estimate_data_compression_savings 
    @schema_name = 'dbo', 
    @object_name = 'Movies', 
    @index_id = NULL, 
    @partition_number = 3, 
    @data_compression = 'NONE';

Risultato (usando l'output verticale):

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 questo esempio, ottengo una stima dei requisiti di spazio se dovessi rimuovere la compressione (ovvero impostarla su NONE ).

Verifica quali partizioni utilizzano la compressione

Possiamo anche usare sys.partitions view per verificare che la partizione abbia una compressione.

SELECT
    [partition_number],
    [data_compression],
    [data_compression_desc]
FROM sys.partitions
WHERE object_id = OBJECT_ID('Movies');

Risultato:

+--------------------+--------------------+-------------------------+
| partition_number   | data_compression   | data_compression_desc   |
|--------------------+--------------------+-------------------------|
| 1                  | 0                  | NONE                    |
| 2                  | 0                  | NONE                    |
| 4                  | 0                  | NONE                    |
| 3                  | 1                  | ROW                     |
+--------------------+--------------------+-------------------------+

Rimuovi compressione

Prima di passare all'esempio 2, rimuoviamo la compressione dalla partizione.

ALTER TABLE Movies
REBUILD PARTITION = 3 WITH (DATA_COMPRESSION = NONE);

Esempio 2:compressione di più partizioni

In questo esempio, ricostruiamo tutte le partizioni, ma specifichiamo solo le partizioni che vogliamo che vengano compresse.

Questo è un metodo alternativo al nostro primo esempio. Usando questa sintassi, possiamo specificare un elenco di partizioni da comprimere.

ALTER TABLE Movies
REBUILD PARTITION = ALL
WITH (DATA_COMPRESSION = ROW ON PARTITIONS(2,3));

In questo caso ho ricostruito tutte le partizioni, ma ho compresso solo le partizioni 2 e 3.

Ancora una volta, possiamo usare sys.partitions per verificare che fossero compressi.

SELECT
    [partition_number],
    [data_compression],
    [data_compression_desc]
FROM sys.partitions
WHERE object_id = OBJECT_ID('Movies');

Risultato:

+--------------------+--------------------+-------------------------+
| partition_number   | data_compression   | data_compression_desc   |
|--------------------+--------------------+-------------------------|
| 1                  | 0                  | NONE                    |
| 2                  | 1                  | ROW                     |
| 3                  | 1                  | ROW                     |
| 4                  | 0                  | NONE                    |
+--------------------+--------------------+-------------------------+