Ir para o conteúdo

Como posso solucionar o problema de utilização alta ou total do disco no Amazon Redshift?

8 minuto de leitura
0

Estou tendo problema de utilização alta ou total do disco no Amazon Redshift e quero solucioná-lo.

Resolução

Para resolver problemas de utilização alta ou total do disco no Amazon Redshift, siga estas etapas de solução de problemas.

Chave de distribuição e de classificação

Examine o estilo de distribuição, a chave de distribuição e a seleção da chave de classificação da tabela. Tabelas com distorção de distribuição podem causar um nó de disco cheio. Se você tiver tabelas com estilos de distribuição distorcidos, altere o estilo de distribuição para uma distribuição mais uniforme. A distribuição e a distorção da linha podem afetar a distorção do armazenamento e o conjunto de linhas intermediário quando uma consulta é executada.

Para obter a cardinalidade da sua chave de distribuição, execute a seguinte consulta:

SELECT <distkey column>, COUNT(*)
 FROM <schema name>.<table with distribution skew>
 GROUP BY <distkey column>
 HAVING COUNT(*) > 1
 ORDER BY 2 DESC;

Observação: substitua a coluna distkey, o nome do esquema e a tabela com distorção de distribuição pelas variáveis da sua tabela.

Para evitar uma etapa de classificação, use colunas SORT KEY na sua cláusula ORDER BY. Uma etapa de classificação pode usar memória em excesso e causar um vazamento de disco. Para obter mais informações, consulte Chaves de classificação.

No conjunto de resultados filtrado, escolha uma coluna com alta cardinalidade para ver sua distribuição de dados. Para obter mais informações, consulte Selecione o melhor estilo de distribuição.

Processamento de consultas

Analise qualquer memória de consulta alocada. Os resultados da consulta intermediária podem ser armazenados em blocos temporários durante o processamento das consultas. Se não houver memória livre suficiente, as tabelas causarão um vazamento de disco. Conjuntos de resultados intermediários não são compactados, o que afeta o espaço disponível em disco. Para obter mais informações, consulte Memória insuficiente alocada para a consulta.

O Amazon Redshift usa como padrão uma estrutura de tabela com distribuição uniforme e sem codificação de coluna para tabelas temporárias. Se você usar a sintaxe SELECT...INTO, use uma declaração CREATE. Para obter mais informações, consulte Tip #6 (Dica nº 6) em Top 10 performance tuning techniques for Amazon Redshift (As dez principais técnicas de ajuste de desempenho para o Amazon Redshift).

Se não houver memória suficiente alocada para sua consulta, você poderá ver uma etapa em SVL_QUERY_SUMMARY em que is_diskbased mostra o valor verdadeiro. A consulta a seguir identifica as 20 principais consultas sobre vazamento de disco em um período especificado:

SELECT q.userid, q.query, q.starttime, q.endtime, m.query_temp_blocks_to_disk, btrim(querytxt)  
 FROM stl_query q JOIN SVL_QUERY_METRICS_SUMMARY m ON m.query = q.query
 WHERE m.query_temp_blocks_to_disk > 0
   AND starttime BETWEEN '2025-01-01 00:00:00' AND '2025-01-02 00:00:00'
 ORDER BY m.query_temp_blocks_to_disk DESC
 LIMIT 20;

Para resolver esse problema, aumente o número de slots de consulta para alocar mais memória à consulta.

Se você notar um pico repentino na utilização, execute a seguinte consulta para identificar as 20 principais consultas sobre vazamento de disco:

SELECT a.userid, a.query, a.blocks_to_disk, trim(b.text) as text
 FROM stv_query_metrics a, stv_inflight b
 WHERE a.query = b.query
   AND a.segment = -1
   AND a.step_type = -1
   AND a.max_blocks_to_disk > 0
 ORDER BY 3 DESC
 LIMIT 20;

Na saída, consulte o valor blocks_to_disk da coluna para identificar vazamentos de disco. Encerre as consultas que vazam demais e, em seguida, aloque mais memória para as consultas antes de executá-las novamente.

Também é possível usar regras de monitoramento de consulta do WLM para combater cargas pesadas de processamento e identificar consultas com uso intenso de E/S.

Tabelas com colunas VARCHAR(MAX)

Verifique as colunas VARCHAR ou CHARACTER VARYING para visualizar os espaços finais em branco que podem ser omitidos quando os dados são armazenados no disco. Quando as consultas são processadas, os espaços finais em branco podem ocupar todo o comprimento da memória. O valor máximo de VARCHAR e CHARACTER VARYING é 65535 bytes. É uma prática recomendada usar o menor tamanho possível de coluna.

Para gerar uma lista de tabelas com larguras máximas de coluna, execute a seguinte consulta:

SELECT database, schema || '.' || "table" AS "table", max_varchar
 FROM svv_table_info
 WHERE max_varchar > 150 ORDER BY 2;

Para identificar e exibir as larguras reais das colunas largas da tabela VARCHAR, execute a seguinte consulta:

SELECT max(octet_length (rtrim(column_name))) FROM table_name;

Na saída dessa consulta, confirme se o comprimento é adequado ao seu caso de uso. Se as colunas tiverem o comprimento máximo e excederem suas necessidades, ajuste o comprimento para o tamanho mínimo necessário.

Para obter mais informações, consulte Práticas recomendadas do Amazon Redshift para projetar tabelas.

Alta compactação de colunas

Para codificar todas as colunas, exceto a chave de classificação, use ANALYZE COMPRESSION ou a otimização automática de tabela. É uma prática recomendada usar codificação de coluna.

Operações de manutenção

Certifique-se de analisar e realizar vacuum regularmente nas tabelas de banco de dados em seu banco de dados do Amazon Redshift. Identifique todas as consultas que estão sendo executadas em tabelas com estatísticas ausentes. Em seguida, evite que consultas sejam executadas em tabelas com estatísticas ausentes para que o Amazon Redshift não escaneie linhas de tabelas desnecessárias.

Observação: operações de manutenção, como VACUUM e DEEP COPY, usam espaço de armazenamento temporário para suas operações de classificação e podem provocar um pico no uso do disco.

Por exemplo, a consulta a seguir identifica estatísticas desatualizadas no Amazon Redshift:

SELECT table_id, database, schema, "table", stats_off, size
 FROM svv_table_info
 WHERE stats_off > 10
 ORDER BY size DESC;

Além disso, use o comando ANALYZE para visualizar e analisar estatísticas da tabela.

Produtos cartesianos com cross-joins

Use o plano EXPLAIN da consulta para procurar consultas com produtos cartesianos. Os produtos cartesianos são cross-joins não relacionadas e podem aumentar o número de blocos. Essas cross-joins podem resultar em maior utilização da memória e em mais tabelas vazadas para o disco. Se as cross-joins não compartilharem uma condição JOIN, elas produzirão um produto cartesiano de duas tabelas. Cada linha de uma tabela se junta a todas as linhas da outra tabela.

As cross-joins também podem ser executadas como junções de loop aninhados e provocar longos períodos de processo. Junções de loops aninhados resultam em picos na utilização geral do disco. Para obter mais informações, consulte Como identificar consultas com loops aninhados.

Tamanho mínimo da tabela

Tabelas individuais podem ter tamanhos diferentes em clusters diferentes. O tamanho mínimo da tabela é determinado pelo número de colunas e se a tabela tem uma SORTKEY e o número de fatias preenchidas. Se você redimensionou recentemente um cluster do Amazon Redshift, poderá ver uma alteração no seu armazenamento geral em disco causada pela alteração das fatias. O Amazon Redshift também conta os segmentos de tabela usados por cada tabela. Para obter mais informações, consulte 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?

Blocos tombstone

Blocos tombstone são gerados quando ocorre uma transação WRITE em uma tabela do Amazon Redshift e há uma operação de leitura simultânea. O Amazon Redshift mantém os blocos antes da operação de gravação para manter a consistência de uma operação simultânea de leitura. Não é possível alterar os blocos do Amazon Redshift. Cada ação de Inserir, Atualizar ou Excluir cria um novo conjunto de blocos, marcando os blocos antigos como tombstones.

Às vezes, os tombstones não são limpos na fase de confirmação devido a transações de tabela de longa duração. Tombstones também podem apresentar falhas quando há muitas cargas de ETL em execução ao mesmo tempo. Como o Amazon Redshift monitora o banco de dados desde o início da transação, qualquer tabela gravada no banco de dados também retém os blocos tombstone. Se transações de tabela de longa duração ocorrerem regularmente e através de várias cargas, poderão se acumular tombstones suficientes para resultar em um erro “Disk Full”.

Se houver consultas de longa duração ativas, execute o comando commit para encerrá-las e liberar todos os blocos subsequentes:

begin;
create table a (id int);
insert into a values(1);
commit;
drop table a;

Para confirmar os blocos tombstone, execute a seguinte consulta:

SELECT trim(name) as tablename, count(case when tombstone > 0 then 1 else null end) as tombstones
 FROM svv_diskusage
 GROUP BY 1
 HAVING count(case when tombstone > 0 then 1 else null end) > 0
 ORDER BY 2 DESC;

Copiar um arquivo grande

Durante uma operação COPY, é possível receber um erro “Disk Full error” mesmo se houver armazenamento suficiente disponível. Esse erro ocorre se a operação de classificação vazar para o disco e criar blocos temporários.

Se você se deparar com uma mensagem de erro “Disk Full”, verifique a tabela STL_DISK_FULL_DIAG. Verifique os blocos temporários e qual ID de consulta causou o erro:

SELECT
  '2000-01-01'::timestamp + (currenttime/1000000.0)* interval '1 second' as currenttime,
  node_num,
  query_id,
  temp_blocks
 FROM stl_disk_full_diag;

Para mais informações, consulte Práticas recomendadas do Amazon Redshift para carregamento de dados.

Blocos de consulta de unidade de compartilhamento de dados em clusters de consumidores

Quando uma consulta de unidade de compartilhamento de dados é executada no cluster do consumidor, os blocos de dados associados à consulta são contados nas métricas PercentageDiskSpaceUsed. Esses blocos de dados são removidos das métricas PercentageDiskSpaceUsed devido à reinicialização do cluster e a outros fatores. Nenhuma outra ação é necessária para esse comportamento esperado.

Verifique o espaço em disco

Verifique a porcentagem de espaço em disco na guia Performance do console do Amazon Redshift.

Informações relacionadas

Performance do Amazon Redshift

AWS OFICIALAtualizada há um ano