Ao usar o AWS re:Post, você concorda com os AWS re:Post Termos de uso

Por que uma tabela em um cluster provisionado do Amazon Redshift consome mais ou menos espaço de armazenamento em disco do que o esperado?

4 minuto de leitura
0

Uma tabela está ocupando mais espaço em disco do que o esperado ou uma porcentagem do espaço livre em disco não aumentou após meu redimensionamento clássico. Quero saber como o Amazon Redshift calcula o armazenamento em disco e o tamanho da tabela.

Resolução

Verificar o tamanho mínimo da tabela

O tamanho mínimo da tabela é a menor área ocupada por uma tabela em um cluster do Amazon Redshift. Você pode verificar o tamanho mínimo da tabela ao analisar o uso do armazenamento em cluster ou ao redimensionar um cluster do Amazon Redshift.

Para tabelas criadas usando o estilo de distribuição KEY, EVEN ou Auto (EVEN), use a seguinte fórmula:

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

Para tabelas criadas usando o estilo de distribuição ALL ou Auto (ALL), use a seguinte fórmula:

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

Para as fórmulas de tabela, o número de segmentos é baseado no fato de a tabela ter uma chave de classificação definida. Se uma tabela do Amazon Redshift tiver uma chave de classificação definida, essa tabela terá dois segmentos: um classificado e um não classificado. Se uma tabela do Amazon Redshift não tiver chave de classificação, ela produzirá somente um segmento não classificado.

Para calcular o número de fatias preenchidas, execute a seguinte consulta:

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" ;

Exemplo: seis clusters dc2.large

Por exemplo, você pode criar um cluster de seis dc2.large com quatro tabelas pequenas da mesma estrutura e número de linhas. Se o cluster usar três estilos de distribuição diferentes e um estilo de distribuição com uma chave de classificação, consultas diferentes serão usadas.

A consulta a seguir cria uma tabela com um estilo de distribuição ALL e uma saída de seis fatias preenchidas:

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');

A consulta a seguir cria uma tabela com um estilo de distribuição EVEN e uma saída de seis fatias preenchidas:

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');

A consulta a seguir cria uma tabela com uma chave de distribuição e uma saída de uma fatia preenchida:

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');

A consulta a seguir cria uma tabela com uma chave de distribuição, uma chave de classificação e uma saída de seis fatias preenchidas:

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');

Calcular o tamanho mínimo da tabela

Para calcular o tamanho mínimo da tabela para um estilo de distribuição EVEN, use a seguinte fórmula:

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

Para calcular o tamanho mínimo da tabela para um estilo de distribuição ALL, use a seguinte fórmula:

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

Para calcular o tamanho mínimo da tabela para um estilo de distribuição KEY, use a seguinte fórmula:

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

Para calcular o tamanho mínimo da tabela para uma distribuição uniforme com uma chave de classificação, use a seguinte fórmula:

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

Com um pequeno número de linhas inseridas, o tamanho da sua tabela é maior que o esperado. O tamanho da tabela continua crescendo à medida que o número de linhas é inserido e o número de fatias preenchidas aumenta.

Quando você executa um redimensionamento clássico, o número de fatias preenchidas aumenta sem um aumento no volume de dados da tabela. Como resultado, a quantidade de espaço livre após o redimensionamento não cresce linearmente.

Informações relacionadas

Práticas recomendadas do Amazon Redshift para criar tabelas

Trabalhar com a otimização automática de tabelas

Armazenamento colunar

Escolha a melhor chave de classificação

Planejamento de consulta e fluxo de trabalho de execução

AWS OFICIAL
AWS OFICIALAtualizada há um ano