sql >> Database >  >> RDS >> Sqlserver

Comprimeer een specifieke partitie binnen een tabel in SQL Server (T-SQL)

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


  1. Wanneer autovacuüm niet stofzuigt

  2. de eigenschap `diesel::Expression` is niet geïmplementeerd voor `bigdecimal::BigDecimal`

  3. Excel-gegevensblad laden in Oracle-database

  4. Over het V-formaatelement in Oracle