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?
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
Vídeos relacionados
Conteúdo relevante
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há um ano