Wanneer u een gepartitioneerde tabel comprimeert in SQL Server, kunt u alle partities comprimeren, sommige of slechts één partitie.
Gebruik hiervoor de REBUILD PARTITION
syntaxis binnen de ALTER TABLE
uitspraak.
Wanneer u dit doet, kunt u alleen de opgegeven partitie of alle partities opnieuw opbouwen. Als alternatief kunt u alle partities opnieuw opbouwen, terwijl u alleen een specifieke partitie of lijst met partities comprimeert.
Voorbeeld 1 – Een partitie opnieuw opbouwen
In dit eerste voorbeeld herbouwen en comprimeren we slechts één partitie in de tabel.
Geschatte compressiebesparingen
Stel je voor dat we een enkele partitie willen comprimeren in een tabel met de naam Movies
.
Ten eerste kunnen we de sp_estimate_data_compression_savings
. gebruiken systeem opgeslagen procedure om de besparingen te schatten die we zouden krijgen door de tabel te comprimeren.
EXEC sp_estimate_data_compression_savings
@schema_name = 'dbo',
@object_name = 'Movies',
@index_id = NULL,
@partition_number = 3,
@data_compression = 'ROW';
Resultaat (met verticale uitvoer):
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
Volgens sp_estimate_data_compression_savings
, zou de partitiegrootte moeten verminderen van 120 KB naar 88 KB zodra we het hebben gecomprimeerd.
Comprimeer de partitie
Laten we doorgaan en het comprimeren.
ALTER TABLE Movies
REBUILD PARTITION = 3 WITH (DATA_COMPRESSION = ROW);
In dit geval heb ik rijcompressie gebruikt.
Controleer de compressiebesparingen
Als we nu sp_estimate_data_compression_savings
. opvragen nogmaals, we zullen zien dat de huidige grootte nu precies is zoals eerder werd geschat (88 KB).
EXEC sp_estimate_data_compression_savings
@schema_name = 'dbo',
@object_name = 'Movies',
@index_id = NULL,
@partition_number = 3,
@data_compression = 'NONE';
Resultaat (met verticale uitvoer):
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 dit voorbeeld krijg ik een schatting van de benodigde ruimte als ik de compressie zou verwijderen (d.w.z. stel deze in op NONE
).
Controleer welke partities compressie gebruiken
We kunnen ook de sys.partitions
. gebruiken bekijken om te controleren of de partitie compressie heeft.
SELECT
[partition_number],
[data_compression],
[data_compression_desc]
FROM sys.partitions
WHERE object_id = OBJECT_ID('Movies');
Resultaat:
+--------------------+--------------------+-------------------------+ | partition_number | data_compression | data_compression_desc | |--------------------+--------------------+-------------------------| | 1 | 0 | NONE | | 2 | 0 | NONE | | 4 | 0 | NONE | | 3 | 1 | ROW | +--------------------+--------------------+-------------------------+
Compressie verwijderen
Voordat we verder gaan met voorbeeld 2, laten we eerst de compressie van de partitie verwijderen.
ALTER TABLE Movies
REBUILD PARTITION = 3 WITH (DATA_COMPRESSION = NONE);
Voorbeeld 2 – Meerdere partities comprimeren
In dit voorbeeld herbouwen we alle partities, maar specificeren alleen de partities die we willen comprimeren.
Dit is een alternatieve methode voor ons eerste voorbeeld. Met behulp van deze syntaxis kunnen we een lijst met te comprimeren partities specificeren.
ALTER TABLE Movies
REBUILD PARTITION = ALL
WITH (DATA_COMPRESSION = ROW ON PARTITIONS(2,3));
In dit geval heb ik alle partities opnieuw opgebouwd, maar ik heb alleen partities 2 en 3 gecomprimeerd.
Nogmaals, we kunnen sys.partitions
. gebruiken om te controleren of ze zijn gecomprimeerd.
SELECT
[partition_number],
[data_compression],
[data_compression_desc]
FROM sys.partitions
WHERE object_id = OBJECT_ID('Movies');
Resultaat:
+--------------------+--------------------+-------------------------+ | partition_number | data_compression | data_compression_desc | |--------------------+--------------------+-------------------------| | 1 | 0 | NONE | | 2 | 1 | ROW | | 3 | 1 | ROW | | 4 | 0 | NONE | +--------------------+--------------------+-------------------------+