Processamento de consultas SQL no Amazon Redshift - AWS Orientação prescritiva

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Processamento de consultas SQL no Amazon Redshift

O Amazon Redshift roteia uma consulta SQL enviada por meio do analisador e otimizador para desenvolver um plano de consulta. O mecanismo de execução então converte o plano de consulta em código e envia esse código para nós de computação para execução. Antes de criar um plano de consulta, é fundamental entender como o processamento de consultas funciona.

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

O diagrama a seguir fornece uma visão detalhada do planejamento e fluxo de trabalho da execução de consultas.

Fluxo de trabalho de planejamento e execução de consultas entre o cliente, o nó líder e os nós de computação.

O diagrama mostra o seguinte fluxo de trabalho:

  1. O nó líder no cluster do Amazon Redshift recebe a consulta e analisa a instrução SQL.

  2. O analisador produz uma árvore de consulta inicial que é uma representação lógica da consulta original.

  3. O otimizador de consultas pega a árvore de consulta inicial e a avalia, analisa as estatísticas da tabela para determinar a ordem de junção e a seletividade dos predicados e, se necessário, reescreve a consulta para maximizar sua eficiência. Às vezes, uma única consulta pode ser escrita como várias instruções dependentes em segundo plano.

  4. O otimizador gera um plano de consulta (ou vários, se a etapa anterior resultou em múltiplas consultas) para a execução com a melhor performance. O plano de consulta especifica as opções de execução, como a ordem de execução, as operações da rede, os tipos de junção, a ordem de junção, as opções de agregação e a distribuição de dados.

  5. Um plano de consulta contém informações sobre as operações individuais necessárias para executar uma consulta. Use o comando EXPLAIN para visualizar o plano de consulta. O plano de consulta é uma ferramenta fundamental para analisar e ajustar consultas complexas.

  6. O otimizador de consultas envia o plano de consulta para o mecanismo de execução. O mecanismo de execução verifica o cache do plano compilado em busca de uma correspondência do plano de consulta e usa o cache compilado (se encontrado). Do contrário, o mecanismo de execução converte o plano de consulta em etapas, segmentos e fluxos:

    • As etapas são operações individuais que ocorrem durante a execução da consulta. As etapas são identificadas por um rótulo (por exemplo scan, dist, hjoin ou merge). Uma etapa é a menor unidade. Você pode combinar etapas para que os nós de computação possam executar uma consulta, junção ou outra operação de banco de dados.

    • Um segmento refere-se a um segmento de uma consulta e combina várias etapas que podem ser realizadas por um único processo. Um segmento é a menor unidade de compilação executável por uma fatia de nó de computação. Uma fatia é a unidade de processamento paralelo no Amazon Redshift.

    • Um fluxo é uma coleção de segmentos a serem divididos entre as fatias disponíveis do nó de computação. Os segmentos em um fluxo são executados em paralelo nas fatias de nós. Portanto, a mesma etapa do mesmo segmento também é executada paralelamente em várias fatias.

  7. O gerador de código recebe o plano convertido e gera uma função C++ para cada segmento.

  8. A função C++ gerada é compilada pelo GNU Compiler Collection e é convertida em um arquivo O (.o).

  9. O código compilado (arquivo O) é executado. O código compilado é executado mais rapidamente que o código interpretado e usa menos capacidade computacional.

  10. O arquivo O compilado é, então, transmitido para os nós de computação.

  11. Cada nó de computação consiste em várias fatias de computação. As fatias de computação executam os segmentos da consulta em paralelo. O Amazon Redshift aproveita a comunicação de rede, a memória e o gerenciamento de disco otimizados para passar resultados intermediários de uma etapa do plano de consulta para a próxima. Isso também ajuda a acelerar a execução da consulta. Considere o seguinte:

    • As etapas 6, 7, 8, 9, 10 e 11 acontecem uma vez para cada fluxo.

    • O mecanismo cria os segmentos executáveis para um fluxo e os envia para os nós de computação.

    • Após os segmentos de um fluxo anterior serem concluídos, o mecanismo gera os segmentos para o próximo fluxo. Desta forma, o mecanismo pode analisar o que aconteceu no fluxo anterior (por exemplo, se as operações foram baseadas em disco) para influenciar a geração de segmentos no fluxo seguinte.

  12. Após os nós de computação terminarem, eles retornam os resultados da consulta para o nó líder para o processamento final. O nó líder mescla os dados em um único conjunto de resultados e aborda qualquer classificação ou agregação necessária.

  13. O nó líder retorna os resultados para o cliente.

O diagrama a seguir mostra o fluxo de trabalho de execução de fluxos, segmentos, etapas e fatias de nós de computação. Lembre-se do seguinte:

  • As etapas em um segmento são executadas sequencialmente.

  • Os segmentos em um fluxo são executados em paralelo.

  • Os fluxos são executados sequencialmente.

  • As fatias dos nós de computação são executadas em paralelo.

O diagrama a seguir mostra uma representação visual de fluxos, segmentos e etapas. Cada segmento contém várias etapas e cada fluxo contém vários segmentos.

Cada fluxo contém vários segmentos, que contêm várias etapas.

O diagrama a seguir mostra uma representação visual das execuções de consultas e das fatias dos nós de computação. Cada nó de computação contém várias fatias, fluxos, segmentos e etapas.

Fatias, fluxos, segmentos e etapas em cada nó de computação.

Considerações adicionais

Recomendamos que você considere o seguinte em relação ao processamento de consultas:

  • Como o código compilado é armazenado em cache e compartilhado entre sessões no mesmo cluster, as execuções subsequentes da mesma consulta serão mais rápidas, normalmente até mesmo com parâmetros diferentes.

  • Ao fazer uma avaliação comparativa das suas consultas, você deve sempre comparar os tempos da segunda execução de uma consulta, pois a primeira execução inclui as despesas gerais de compilação do código. Para obter mais informações, consulte Fatores de performance da consulta no guia de práticas recomendadas de consultas para o Amazon Redshift.

  • Os nós de computação podem retornar alguns dados ao nó líder durante a execução de consulta, caso necessário. Por exemplo, se você tiver uma subconsulta com uma cláusula LIMIT, o limite será aplicado no nó líder antes que os dados sejam redistribuídos no cluster para processamento adicional.