När du komprimerar en partitionerad tabell i SQL Server kan du komprimera alla partitioner, några eller bara en partition.
För att göra detta, använd REBUILD PARTITION
syntax i ALTER TABLE
påstående.
När du gör detta kan du bara bygga om den angivna partitionen eller alla partitioner. Alternativt kan du bygga om alla partitioner samtidigt som du bara komprimerar en specifik partition eller lista med partitioner.
Exempel 1 – Bygg om en partition
I det här första exemplet bygger vi om och komprimerar bara en partition i tabellen.
Uppskatta kompressionsbesparingar
Föreställ dig att vi vill komprimera en enda partition i en tabell som heter Movies
.
Först kan vi använda sp_estimate_data_compression_savings
systemlagrad procedur för att uppskatta de besparingar vi skulle få genom att komprimera tabellen.
EXEC sp_estimate_data_compression_savings
@schema_name = 'dbo',
@object_name = 'Movies',
@index_id = NULL,
@partition_number = 3,
@data_compression = 'ROW';
Resultat (med vertikal utdata):
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
Enligt sp_estimate_data_compression_savings
, bör partitionsstorleken minska från 120 KB till 88 KB när vi har komprimerat den.
Komprimera partitionen
Låt oss gå vidare och komprimera det.
ALTER TABLE Movies
REBUILD PARTITION = 3 WITH (DATA_COMPRESSION = ROW);
I det här fallet använde jag radkompression.
Verifiera kompressionsbesparingarna
Om vi nu frågar sp_estimate_data_compression_savings
igen, vi kommer att se att den nuvarande storleken nu är exakt som beräknats tidigare (88 KB).
EXEC sp_estimate_data_compression_savings
@schema_name = 'dbo',
@object_name = 'Movies',
@index_id = NULL,
@partition_number = 3,
@data_compression = 'NONE';
Resultat (med vertikal utdata):
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
I det här exemplet får jag en uppskattning av utrymmeskraven om jag skulle ta bort komprimeringen (dvs. ställ in den på NONE
).
Verifiera vilka partitioner som använder komprimering
Vi kan också använda sys.partitions
visa för att verifiera att partitionen har komprimering.
SELECT
[partition_number],
[data_compression],
[data_compression_desc]
FROM sys.partitions
WHERE object_id = OBJECT_ID('Movies');
Resultat:
+--------------------+--------------------+-------------------------+ | partition_number | data_compression | data_compression_desc | |--------------------+--------------------+-------------------------| | 1 | 0 | NONE | | 2 | 0 | NONE | | 4 | 0 | NONE | | 3 | 1 | ROW | +--------------------+--------------------+-------------------------+
Ta bort komprimering
Innan vi går vidare till exempel 2, låt oss ta bort komprimeringen från partitionen.
ALTER TABLE Movies
REBUILD PARTITION = 3 WITH (DATA_COMPRESSION = NONE);
Exempel 2 – Komprimera flera partitioner
I det här exemplet bygger vi om alla partitioner, men anger bara de partitioner vi vill ska komprimeras.
Detta är en alternativ metod till vårt första exempel. Med den här syntaxen kan vi ange en lista över partitioner som ska komprimeras.
ALTER TABLE Movies
REBUILD PARTITION = ALL
WITH (DATA_COMPRESSION = ROW ON PARTITIONS(2,3));
I det här fallet byggde jag om alla partitioner, men jag komprimerade bara partitionerna 2 och 3.
Återigen kan vi använda sys.partitions
för att verifiera att de var komprimerade.
SELECT
[partition_number],
[data_compression],
[data_compression_desc]
FROM sys.partitions
WHERE object_id = OBJECT_ID('Movies');
Resultat:
+--------------------+--------------------+-------------------------+ | partition_number | data_compression | data_compression_desc | |--------------------+--------------------+-------------------------| | 1 | 0 | NONE | | 2 | 1 | ROW | | 3 | 1 | ROW | | 4 | 0 | NONE | +--------------------+--------------------+-------------------------+