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