Qual è il motivo per cui una tabella in un cluster Amazon Redshift consuma più o meno spazio di archiviazione su disco del previsto?

4 minuti di lettura
0

Una tabella occupa più spazio su disco del previsto oppure una percentuale di spazio libero su disco non è aumentata dopo aver eseguito il ridimensionamento classico. In che modo Amazon Redshift calcola lo spazio di archiviazione su disco e le dimensioni delle tabelle?

Soluzione

Verifica delle dimensioni minime della tabella

Le dimensioni minime della tabella corrispondono all'ingombro minimo di una tabella su un cluster Amazon Redshift. Puoi controllare le dimensioni minime della tabella quando analizzi l'uso dello spazio di archiviazione del cluster o quando ridimensioni un cluster Amazon Redshift.

Per le tabelle create utilizzando lo stile di distribuzione KEY, EVEN o Auto (EVEN), usa la seguente formula:

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

Per le tabelle create utilizzando lo stile di distribuzione ALL o Auto (ALL), usa la seguente formula:

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

Per le formule della tabella, il numero di segmenti si basa sul fatto che la tabella abbia una chiave di ordinamento definita. Se una tabella Amazon Redshift ha una chiave di ordinamento definita, la tabella presenta due segmenti: un segmento ordinato e uno non ordinato. Se una tabella Amazon Redshift non dispone di una chiave di ordinamento, la tabella produce solo un segmento non ordinato.

Puoi calcolare il numero di sezioni popolate utilizzando la seguente query:

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

Esempio: six dc2.large cluster

Ad esempio, puoi creare sei cluster dc2.large con quattro tabelle piccole dotate della stessa struttura e dello stesso numero di righe. Se il cluster utilizza tre diversi stili di distribuzione e uno stile di distribuzione con una chiave di ordinamento, vengono impiegate query diverse.

La seguente query crea una tabella con uno stile di distribuzione ALL (e un output di sei sezioni popolate):

create table testsize_all (a varchar(100),b varchar(100), c
varchar(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 seguente query crea una tabella con uno stile di distribuzione EVEN (e un output di sei sezioni popolate):

create table testsize_even (a varchar(100),b varchar(100), c
varchar(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 seguente query crea una tabella con una chiave di distribuzione (e un output di una sezione popolata):

create table testsize_key (a varchar(100),b varchar(100), c
varchar(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 seguente query crea una tabella con una chiave di distribuzione e una chiave di ordinamento (con un output di sei sezioni popolate):

create table testsize_sort_even (a varchar(100),b
varchar(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');

Calcolo delle dimensioni minime della tabella

Per calcolare le dimensioni minime della tabella in modo da ottenere uno stile di distribuzione EVEN, usa la seguente formula:

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

Per calcolare le dimensioni minime della tabella in modo da ottenere uno stile di distribuzione ALL, usa la seguente formula:

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

Per calcolare le dimensioni minime della tabella in modo da ottenere uno stile di distribuzione KEY, usa la seguente formula:

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

Per calcolare le dimensioni minime della tabella in modo da ottenere una distribuzione EVEN con una chiave di ordinamento, utilizza la seguente formula:

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

Come indicano i calcoli, con un numero limitato di righe inserite, le dimensioni della tabella sono maggiori del previsto. Le dimensioni della tabella continuano a crescere man mano che viene inserita una quantità di righe e che il numero di sezioni popolate aumenta.

Quando viene eseguito un ridimensionamento classico, il numero di sezioni popolate aumenta senza un incremento del volume di dati per la tabella. Di conseguenza, la quantità di spazio libero dopo il ridimensionamento non aumenta in modo lineare.


Informazioni correlate

Best practice di Amazon Redshift per la progettazione di tabelle

Utilizzo dell'ottimizzazione automatica delle tabelle

Archiviazione colonnare

Scelta della migliore chiave di ordinamento

Pianificazione di query e flusso di lavoro di esecuzione

AWS UFFICIALE
AWS UFFICIALEAggiornata 2 anni fa