Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Compresser une partition spécifique dans une table dans SQL Server (T-SQL)

Lorsque vous compressez une table partitionnée dans SQL Server, vous pouvez compresser toutes les partitions, certaines ou une seule partition.

Pour ce faire, utilisez le REBUILD PARTITION syntaxe dans ALTER TABLE déclaration.

Ce faisant, vous pouvez reconstruire uniquement la partition spécifiée ou toutes les partitions. Alternativement, vous pouvez reconstruire toutes les partitions, tout en compressant uniquement une partition spécifique ou une liste de partitions.

Exemple 1 - Reconstruire une partition

Dans ce premier exemple, nous reconstruisons et compressons une seule partition dans la table.

Estimer les économies de compression

Imaginons que nous voulions compresser une seule partition dans une table appelée Movies .

Tout d'abord, nous pouvons utiliser le sp_estimate_data_compression_savings procédure stockée du système pour estimer les économies que nous obtiendrions de la compression de la table.

EXEC sp_estimate_data_compression_savings 
    @schema_name = 'dbo', 
    @object_name = 'Movies', 
    @index_id = NULL, 
    @partition_number = 3, 
    @data_compression = 'ROW';

Résultat (en utilisant la sortie verticale) :

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

Selon sp_estimate_data_compression_savings , la taille de la partition devrait passer de 120 Ko à 88 Ko une fois que nous l'aurons compressée.

Compresser la partition

Allons-y et compressons-le.

ALTER TABLE Movies
REBUILD PARTITION = 3 WITH (DATA_COMPRESSION = ROW);

Dans ce cas, j'ai utilisé la compression de ligne.

Vérifier les économies de compression

Maintenant, si nous interrogeons sp_estimate_data_compression_savings encore une fois, nous verrons que la taille actuelle est maintenant exactement celle estimée précédemment (88 Ko).

EXEC sp_estimate_data_compression_savings 
    @schema_name = 'dbo', 
    @object_name = 'Movies', 
    @index_id = NULL, 
    @partition_number = 3, 
    @data_compression = 'NONE';

Résultat (en utilisant la sortie verticale) :

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

Dans cet exemple, j'obtiens une estimation de l'espace requis si je devais supprimer la compression (c'est-à-dire la définir sur NONE ).

Vérifiez quelles partitions utilisent la compression

Nous pouvons également utiliser les sys.partitions view pour vérifier que la partition est compressée.

SELECT
    [partition_number],
    [data_compression],
    [data_compression_desc]
FROM sys.partitions
WHERE object_id = OBJECT_ID('Movies');

Résultat :

+--------------------+--------------------+-------------------------+
| partition_number   | data_compression   | data_compression_desc   |
|--------------------+--------------------+-------------------------|
| 1                  | 0                  | NONE                    |
| 2                  | 0                  | NONE                    |
| 4                  | 0                  | NONE                    |
| 3                  | 1                  | ROW                     |
+--------------------+--------------------+-------------------------+

Supprimer la compression

Avant de passer à l'exemple 2, supprimons la compression de la partition.

ALTER TABLE Movies
REBUILD PARTITION = 3 WITH (DATA_COMPRESSION = NONE);

Exemple 2 - Compresser plusieurs partitions

Dans cet exemple, nous reconstruisons toutes les partitions, mais spécifions uniquement les partitions que nous voulons compresser.

Il s'agit d'une méthode alternative à notre premier exemple. En utilisant cette syntaxe, nous pouvons spécifier une liste de partitions à compresser.

ALTER TABLE Movies
REBUILD PARTITION = ALL
WITH (DATA_COMPRESSION = ROW ON PARTITIONS(2,3));

Dans ce cas, j'ai reconstruit toutes les partitions, mais je n'ai compressé que les partitions 2 et 3.

Encore une fois, nous pouvons utiliser sys.partitions pour vérifier qu'ils ont été compressés.

SELECT
    [partition_number],
    [data_compression],
    [data_compression_desc]
FROM sys.partitions
WHERE object_id = OBJECT_ID('Movies');

Résultat :

+--------------------+--------------------+-------------------------+
| partition_number   | data_compression   | data_compression_desc   |
|--------------------+--------------------+-------------------------|
| 1                  | 0                  | NONE                    |
| 2                  | 1                  | ROW                     |
| 3                  | 1                  | ROW                     |
| 4                  | 0                  | NONE                    |
+--------------------+--------------------+-------------------------+