Performance - Amazon Redshift

Performance

O Amazon Redshift alcança uma execução de consultas extremamente rápida ao empregar esses recursos de performance.

Processamento paralelo em massa

O processamento paralelo em massa (MPP) permite a execução rápida das consultas mais complexas que utilizam grandes volumes de dados. Vários nós de computação fazem todo o processamento de consultas chegando à agregação do resultado final, com cada núcleo de cada nó executando os mesmos segmentos de consulta compilados em partes de todos os dados.

O Amazon Redshift distribui as linhas de uma tabela para os nós de computação para que os dados possam ser processados em paralelo. Selecionando uma chave de distribuição apropriada para cada tabela, você pode otimizar a distribuição de dados para equilibrar o workload e minimizar o movimento de dados entre nós. Para ter mais informações, consulte Selecione o melhor estilo de distribuição.

O carregamento de dados de arquivos simples aproveita o processamento paralelo, distribuindo o workload entre vários nós enquanto lê vários arquivos simultaneamente. Para obter mais informações sobre como carregar dados em tabelas, consulte Práticas recomendadas do Amazon Redshift para carregamento de dados.

Armazenamento de dados colunar

O armazenamento colunar para tabelas de bancos de dados reduz drasticamente os requisitos de E/S de disco gerais e é um fator importante na otimização da performance de consulta analítica. Armazenar informações da tabela de bancos de dados de maneira colunar reduz o número de solicitações de E/S de disco e diminui o valor de dados que você precisa carregar do disco. Carregar menos dados na memória permite que o Amazon Redshift execute mais processamento na memória ao executar consultas. Consulte Armazenamento colunar para obter uma explicação mais detalhada.

Quando as colunas estão classificadas corretamente, o processador de consultas pode filtrar rapidamente um grande subconjunto de blocos de dados. Para ter mais informações, consulte Selecione a melhor chave de classificação.

Compactação de dados

A compactação de dados reduz requisitos de armazenamento, o que diminui a E/S de disco, melhorando a performance da consulta. Quando você executa uma consulta, os dados compactados são lidos para a memória, depois são descompactados durante a execução da consulta. Carregar menos dados na memória permite que o Amazon Redshift aloque mais memória para analisar os dados. Como o armazenamento colunar armazena dados semelhantes sequencialmente, o Amazon Redshift é capaz de aplicar codificações de compressão adaptáveis especificamente vinculadas a tipos de dados colunares. A melhor maneira de habilitar a compactação de dados nas colunas da tabela é permitir que o Amazon Redshift aplique as codificações de compactação ideais ao carregar a tabela com dados. Para saber mais sobre como usar a compactação de dados automática, consulte Carregamento de tabelas com compactação automática.

Otimizador de consultas

O mecanismo de execução de consultas do Amazon Redshift incorpora um otimizador de consultas com reconhecimento de MPP e também aproveita o armazenamento de dados orientado por colunas. O otimizador de consulta Amazon Redshift implementa melhorias e extensões significativas para o processamento de consultas analíticas complexas que geralmente incluem junções de várias tabelas, subconsultas e agregação. Para saber mais sobre como otimizar consultas, consulte Ajustar a performance da consulta.

Armazenamento em cache dos resultados

Para reduzir o tempo de execução da consulta e melhorar a performance do sistema, o Amazon Redshift armazena em cache os resultados de certos tipos de consultas na memória no nó líder. Quando um usuário envia uma consulta, o Amazon Redshift verifica o cache de resultados em busca de uma cópia em cache válida dos resultados da consulta. Se for encontrada uma correspondência no cache de resultados, o Amazon Redshift usa os resultados armazenados em cache e não executa a consulta. O cache de resultados é transparente para o usuário.

O armazenamento em cache de resultados é ativado por padrão. Para desativar o armazenamento em cache de resultados na sessão atual, defina o parâmetro enable_result_cache_for_session como off.

O Amazon Redshift usa resultados em cache para uma nova consulta quando todas as seguintes opções são verdadeiras:

  • O usuário que envia a consulta possui permissão de acesso aos objetos usados ​​na consulta.

  • A tabela ou as exibições na consulta não foram modificadas.

  • A consulta não usa uma função que precisa ser avaliada cada vez que ela é executada, por exemplo, GETDATE.

  • A consulta não faz referência a tabelas externas do Amazon Redshift Spectrum.

  • Os parâmetros de configuração que podem afetar os resultados da consulta estão inalterados.

  • A consulta coincide sintaticamente com a consulta armazenada em cache.

Para maximizar a eficácia do cache e da utilização dos recursos, o Amazon Redshift não armazena em cache alguns conjuntos grandes de resultados de consultas. O Amazon Redshift determina se os resultados da consulta serão ou não armazenados em cache. Esses fatores incluem o número de entradas no cache e o tipo de instância do seu cluster Amazon Redshift.

Para determinar se uma consulta usou o cache de resultados, abra a visualização do sistema SVL_QLOG. Se uma consulta utilizar o cache de resultados, a coluna source_query retornará o ID da consulta de origem. Se o cache de resultados não tiver sido utilizado, o valor da coluna source_query será NULL.

O exemplo a seguir mostra que as consultas enviadas pelo userid 104 e o userid 102 utilizaram o cache de resultados das consultas realizadas pelo userid 100.

select userid, query, elapsed, source_query from svl_qlog where userid > 1 order by query desc; userid | query | elapsed | source_query -------+--------+----------+------------- 104 | 629035 | 27 | 628919 104 | 629034 | 60 | 628900 104 | 629033 | 23 | 628891 102 | 629017 | 1229393 | 102 | 628942 | 28 | 628919 102 | 628941 | 57 | 628900 102 | 628940 | 26 | 628891 100 | 628919 | 84295686 | 100 | 628900 | 87015637 | 100 | 628891 | 58808694 |

Código compilado

O nó líder distribui código compilado totalmente otimizado em todos os nós de um cluster. Compilar a consulta reduz os custos indiretos associados a um interpretador e, assim, aumenta a velocidade de execução, especialmente em consultas complexas. O código compilado é armazenado em cache e compartilhado entre sessões no mesmo cluster. Como resultado, as execuções futuras da mesma consulta serão mais rápidas, geralmente mesmo com parâmetros diferentes.

Como o mecanismo de execução de consultas compila um código diferente para os protocolos de conexão JDBC e ODBC, dois clientes que usam protocolos diferentes incorrerão no custo inicial de compilar o código. No entanto, os clientes que usarem o mesmo protocolo se beneficiarão do compartilhamento do código armazenado em cache.