Når du komprimerer en partitioneret tabel i SQL Server, kan du komprimere alle partitioner, nogle eller kun én partition.
For at gøre dette skal du bruge REBUILD PARTITION
syntaks i ALTER TABLE
udmelding.
Når du gør dette, kan du kun genopbygge den angivne partition eller alle partitioner. Alternativt kan du genopbygge alle partitioner, mens du kun komprimerer en specifik partition eller liste over partitioner.
Eksempel 1 – Genopbyg én partition
I dette første eksempel genopbygger og komprimerer vi kun én partition i tabellen.
Estimer kompressionsbesparelser
Forestil dig, at vi ønsker at komprimere en enkelt partition i en tabel kaldet Movies
.
For det første kan vi bruge sp_estimate_data_compression_savings
systemlagret procedure til at estimere de besparelser, vi ville få ved at komprimere tabellen.
EXEC sp_estimate_data_compression_savings
@schema_name = 'dbo',
@object_name = 'Movies',
@index_id = NULL,
@partition_number = 3,
@data_compression = 'ROW';
Resultat (ved hjælp af lodret output):
Ifølge sp_estimate_data_compression_savings
, skal partitionsstørrelsen reduceres fra 120 KB til 88 KB, når vi har komprimeret den.
Komprimer partitionen
Lad os gå videre og komprimere det.
ALTER TABLE Movies
REBUILD PARTITION = 3 WITH (DATA_COMPRESSION = ROW);
I dette tilfælde brugte jeg rækkekompression.
Bekræft kompressionsbesparelserne
Hvis vi nu forespørger sp_estimate_data_compression_savings
igen, vi vil se, at den nuværende størrelse nu er nøjagtig som tidligere anslået (88 KB).
EXEC sp_estimate_data_compression_savings
@schema_name = 'dbo',
@object_name = 'Movies',
@index_id = NULL,
@partition_number = 3,
@data_compression = 'NONE';
Resultat (ved hjælp af lodret output):
I dette eksempel får jeg et skøn over pladsbehovet, hvis jeg skulle fjerne komprimeringen (dvs. indstille den til NONE
).
Bekræft, hvilke partitioner der bruger komprimering
Vi kan også bruge sys.partitions
visning for at bekræfte, at partitionen har komprimering.
SELECT
[partition_number],
[data_compression],
[data_compression_desc]
FROM sys.partitions
WHERE object_id = OBJECT_ID('Movies');
Resultat:
+--------------------+--------------------+---- ----------------------+| partitionsnummer | datakomprimering | data_compression_desc ||---------------------+-------------------+----- --------------------|| 1 | 0 | INGEN || 2 | 0 | INGEN || 4 | 0 | INGEN || 3 | 1 | RÆKKE |+--------------------+---------------------+----- --------------------+
Fjern kompression
Før vi går videre til eksempel 2, lad os fjerne komprimeringen fra partitionen.
ALTER TABLE Movies
REBUILD PARTITION = 3 WITH (DATA_COMPRESSION = NONE);
Eksempel 2 – Komprimer flere partitioner
I dette eksempel genopbygger vi alle partitioner, men specificerer kun de partitioner, vi ønsker skal komprimeres.
Dette er en alternativ metode til vores første eksempel. Ved at bruge denne syntaks kan vi angive en liste over partitioner, der skal komprimeres.
ALTER TABLE Movies
REBUILD PARTITION = ALL
WITH (DATA_COMPRESSION = ROW ON PARTITIONS(2,3));
I dette tilfælde genopbyggede jeg alle partitioner, men jeg komprimerede kun partition 2 og 3.
Igen kan vi bruge sys.partitions
for at bekræfte, at de var komprimeret.
SELECT
[partition_number],
[data_compression],
[data_compression_desc]
FROM sys.partitions
WHERE object_id = OBJECT_ID('Movies');
Resultat:
+--------------------+--------------------+---- ----------------------+| partitionsnummer | data_komprimering | data_compression_desc ||---------------------+-------------------+----- --------------------|| 1 | 0 | INGEN || 2 | 1 | RÆKKE || 3 | 1 | RÆKKE || 4 | 0 | INGEN |+---------------------+--------------------+----- --------------------+