sql >> Databasteknik >  >> RDS >> Sqlserver

Komprimera en specifik partition i en tabell i SQL Server (T-SQL)

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


  1. När SQLiteOpenHelper onCreate-metoden anropas?

  2. En dedikerad lagrad procedur för att få den senaste statusen för databassäkerhetskopiering

  3. Få översta raden i varje grupp

  4. Skillnad mellan text och varchar (tecken varierar)