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.
O diagrama mostra o seguinte fluxo de trabalho:
-
O nó líder no cluster do Amazon Redshift recebe a consulta e analisa a instrução SQL.
-
O analisador produz uma árvore de consulta inicial que é uma representação lógica da consulta original.
-
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.
-
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.
-
Um plano de consulta contém informações sobre as operações individuais necessárias para executar uma consulta. Use o comando
EXPLAINpara visualizar o plano de consulta. O plano de consulta é uma ferramenta fundamental para analisar e ajustar consultas complexas. -
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,hjoinoumerge). 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.
-
-
O gerador de código recebe o plano convertido e gera uma função C++ para cada segmento.
-
A função C++ gerada é compilada pelo GNU Compiler Collection e é convertida em um arquivo O (
.o). -
O código compilado (arquivo O) é executado. O código compilado é executado mais rapidamente que o código interpretado e usa menos capacidade computacional.
-
O arquivo O compilado é, então, transmitido para os nós de computação.
-
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.
-
-
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.
-
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.
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.
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.