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