Qual è il motivo per cui una tabella in un cluster con provisioning Amazon Redshift consuma più o meno spazio di archiviazione su disco del previsto?
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. Voglio sapere in che modo Amazon Redshift calcola lo spazio di archiviazione su disco e le dimensioni delle tabelle.
Soluzione
Verifica le 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.
Per calcolare il numero di sezioni popolate, usa la seguente query:
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" ;
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), 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 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), 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 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), 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 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),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');
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
Con un numero limitato di righe inserite, la dimensione della tabella è maggiore 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 esegui 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
Video correlati
Contenuto pertinente
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata un anno fa
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata 2 anni fa