Planejamento de consulta e fluxo de trabalho de execução - Amazon Redshift

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

A ilustração a seguir fornece uma visão detalhada do planejamento e fluxo de trabalho da execução da consulta.

Diagram showing query planning and execution workflow with components like parser, optimizer, and execution engine. (AI generated)

O planejamento e fluxo de trabalho de execução da consulta seguem as seguintes etapas:

  1. O nó líder recebe a consulta e analisa o SQL.

  2. O analisador produz uma árvore de consulta inicial que é uma representação lógica da consulta original. Em seguida, o Amazon Redshift insere essa árvore de consulta no otimizador de consultas.

  3. O otimizador avalia e, se necessário, reescreve a consulta para maximizar sua eficiência. Esse processo às vezes resulta na criação de múltiplas consultas relacionadas para substituir uma única consulta.

  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, tais como tipos de junção, ordem de junção, opções de agregação e os requisitos de distribuição de dados.

    Use o comando EXPLAIN para visualizar o plano de consulta. O plano de consulta é uma ferramenta fundamental para analisar e ajustar consultas complexas. Para ter mais informações, consulte Plano de consulta.

  5. O mecanismo de execução converte o plano de consulta em etapas, segmentos e fluxos:

    Etapa

    Cada etapa é uma operação individual necessária durante a execução da consulta. As etapas podem ser combinadas para permitir que os nós de computação executem uma consulta, junção ou outra operação do banco de dados.

    Segment

    Uma combinação de várias etapas que podem ser realizadas por um único processo, como também a menor unidade de compilação executável por uma fatia do nó de computação. Uma fatia é a unidade de processamento paralelo no Amazon Redshift. Os segmentos em um fluxo são executados em paralelo.

    Fluxo

    Uma coleção de segmentos a serem divididos entre as fatias disponíveis do nó de computação.

    O mecanismo de execução gera o código compilado com base nas etapas, segmentos e fluxos. O código compilado é executado mais rapidamente que o código interpretado e usa menos capacidade computacional. Este código compilado é, então, transmitido para os nós de computação.

    nota

    Ao avaliar suas consultas, você deve sempre comparar os tempos para segunda execução de uma consulta, pois a primeira execução inclui as despesas gerais de compilação do código. Para ter mais informações, consulte Fatores que afetam a performance da consulta.

  6. As fatias do nó de computação executam os segmentos da consulta em paralelo. Como parte desse processo, 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.

As etapas 5 e 6 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. Quando os segmentos daquele fluxo são completados, 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.

Quando os nós de computação terminam, eles retornam os resultados da consulta para o nó de liderança para processamento final. O nó de liderança efetua a fusão dos dados em um único conjunto de resultados e aborda qualquer classificação ou agregação necessária. O nó de liderança, então, retorna os resultados ao cliente.

nota

Os nós de computação podem retornar alguns dados ao nó de liderança 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ó de liderança antes que os dados sejam redistribuídos através do cluster para processamento adicional.