Pourquoi une table d’un cluster Amazon Redshift alloué utilise-t-elle plus ou moins d’espace de stockage sur disque que prévu ?

Lecture de 4 minute(s)
0

Une table occupe plus d’espace disque que prévu ou un pourcentage d’espace disque disponible n’a pas augmenté après un redimensionnement classique. Je souhaite savoir comment Amazon Redshift calcule le stockage sur disque et la taille des tables.

Résolution

Vérifier la taille de table minimale

La taille de table minimale désigne l’encombrement minimal d’une table sur un cluster Amazon Redshift. Vous pouvez vérifier la taille de table minimale lorsque vous analysez l’utilisation du stockage du cluster ou quand vous redimensionnez un cluster Amazon Redshift.

Pour les tables créées à l’aide du style de distribution KEY, EVEN ou Auto (EVEN), utilisez la formule suivante :

Minimum table size = block_size (1 MB) *(number_of_user_columns + 3 system columns) * number_of_populated_slices * number_of_table_segments

Pour les tables créées à l’aide du style de distribution ALL ou Auto (ALL), utilisez la formule suivante :

Minimum table size = block_size (1 MB) *(number_of_user_columns + 3 system columns) * number_of_cluster_nodes * number_of_table_segments

Pour les formules de table, le nombre de segments dépend de l’existence ou non d’une clé de tri définie pour la table. Si une table Amazon Redshift possède une clé de tri définie, elle comporte deux segments : un segment trié et un segment non trié. Si une table Amazon Redshift ne possède pas de clé de tri, elle ne produit qu’un seul segment non trié.

Pour calculer le nombre de tranches remplies, exécutez la requête suivante :

select count(distinct a.slice) asnumber_of_populated_slices, b."table" from stv_blocklist a,
svv_table_info b where a.tbl = b.table_id group by b."table" ;

Exemple : cluster de six dc2.large

Par exemple, vous pouvez créer un cluster de six dc2.large avec quatre petites tables ayant la même structure et un nombre de lignes identique. Si le cluster utilise trois styles de distribution différents et un style de distribution avec une clé de tri, différentes requêtes sont utilisées.

La requête suivante crée une table avec un style de distribution ALL et une sortie de six tranches remplies :

create table testsize_all (a varchar(100),b varchar(100), cvarchar(100)) diststyle all;
insert into testsize_all values
('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c');

La requête suivante crée une table avec un style de distribution EVEN et une sortie de six tranches remplies :

create table testsize_even (a varchar(100),b varchar(100), cvarchar(100)) diststyle even;
insert into testsize_even values
('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c');

La requête suivante crée une table avec une clé de distribution et une sortie d’une tranche remplie :

create table testsize_key (a varchar(100),b varchar(100), cvarchar(100)) distkey (a);
insert into testsize_key values
('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c');

La requête suivante crée une table avec une clé de distribution et une clé de tri et une sortie de six tranches remplies :

create table testsize_sort_even (a varchar(100),bvarchar(100), c varchar(100) ) diststyle even sortkey (a);
insert into testsize_sort_even values
('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c');

Calculer la taille de table minimale

Pour calculer la taille de table minimale pour un style de distribution EVEN, utilisez la formule suivante :

Minimum table size = block_size (1 MB) *(number_of_user_columns + 3 system columns) * number_of_populated_slices *
number_of_table_segments
1MB * (3+3) * 6 *1 = 36MB

Pour calculer la taille de table minimale pour un style de distribution ALL, utilisez la formule suivante :

Minimum table size = block_size (1 MB) *(number_of_user_columns + 3 system columns) * number_of_cluster_nodes *
number_of_table_segments
1MB * (3+3) * 6 *1 = 36 MB

Pour calculer la taille de table minimale pour un style de distribution KEY, utilisez la formule suivante :

Minimum table size = block_size (1 MB) * (number_of_user_columns+ 3 system columns) * number_of_populated_slices *
number_of_table_segments
1MB * (3+3) * 1 *1 = 6MB

Pour calculer la taille de table minimale pour une distribution EVEN avec une clé de tri, utilisez la formule suivante :

Minimum table size = block_size (1 MB) *(number_of_user_columns + 3 system columns) * number_of_populated_slices *
number_of_table_segments
1MB * (3+3) * 6 *2 = 72MB

Avec un petit nombre de lignes insérées, la taille de votre table est plus grande que prévu. La taille de la table continue d’augmenter avec l’insertion du nombre de lignes et l’augmentation du nombre de tranches remplies.

Lorsque vous effectuez un redimensionnement classique, le nombre de tranches remplies augmente sans que le volume de données de la table augmente. Par conséquent, la quantité d’espace libre après le redimensionnement n’augmente pas de façon linéaire.

Informations connexes

Bonnes pratiques de conception de tables sur Amazon Redshift

Utilisation de l’optimisation automatique des tables

Rangement en colonnes

Choisir la meilleure clé de tri

Flux de travail de planification et d’exécution des requêtes

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an