Gerenciamento de planos de consulta do Aurora PostgreSQL - Amazon Aurora

Gerenciamento de planos de consulta do Aurora PostgreSQL

Com o gerenciamento de planos de consulta ativado para seu cluster de banco de dados do Aurora PostgreSQL, o otimizador gera e armazena planos de execução de consultas para qualquer declaração SQL processada mais de uma vez. O otimizador sempre define o status do primeiro plano gerado de uma declaração gerenciada como Approved e o armazena na visualização dba_plans.

O conjunto de planos aprovados salvos para uma declaração gerenciada é conhecido como linha de base de planos. Enquanto a aplicação é executada, o otimizador pode gerar planos adicionais para as declarações gerenciadas. O otimizador define planos capturados adicionais para um status de Unapproved.

Posteriormente, será possível decidir se os planos Unapproved apresentam boa performance e alterá-los para Approved, Rejected ou Preferred. Para fazer isso, você usa a função apg_plan_mgmt.evolve_plan_baselines ou apg_plan_mgmt.set_plan_status.

Quando o otimizador gera um plano para uma instrução SQL, o gerenciamento de planos de consulta salva o plano na tabela apg_plan_mgmt.plans. Os usuários do banco de dados que receberam a função apg_plan_mgmt podem ver os detalhes do plano consultando a visualização apg_plan_mgmt.dba_plans. Por exemplo, a consulta a seguir lista os detalhes dos planos atualmente na visualização de um cluster de banco de dados do Aurora PostgreSQL que não esteja em produção.

  • sql_hash: um identificador da instrução SQL que é o valor de hash para o texto normalizado da instrução SQL.

  • plan_hash: um identificador exclusivo para o plano que é uma combinação do sql_hash e um hash do plano.

  • status – O status do plano. O otimizador pode executar um plano aprovado.

  • enabled: indica se o plano está pronto para uso (verdadeiro) ou não (falso).

  • plan_outline: uma representação do plano utilizada para recriar o plano de execução real. Os operadores na estrutura em árvore são mapeados para operadores na saída EXPLAIN.

A visualização apg_plan_mgmt.dba_plans tem muitas outras colunas que contêm todos os detalhes do plano, como quando ele foi utilizado pela última vez. Para obter detalhes completos, consulte Referência da visualização apg_plan_mgmt.dba_plans da edição compatível do Aurora PostgreSQL.

Normalização e o hash SQL

Na visualização apg_plan_mgmt.dba_plans, identifique uma declaração gerenciada com um valor de hash SQL. O hash SQL é calculado com base em uma representação normalizada da declaração SQL que remove algumas diferenças, como os valores literais.

O processo de normalização de cada declaração SQL preserva espaço e maiúsculas e minúsculas, para que você ainda possa ler e entender a essência da declaração SQL. A normalização remove ou substitui os itens a seguir.

  • Principais comentários do bloco

  • A palavra-chave EXPLAIN e as opções EXPLAIN e EXPLAIN ANALYZE

  • Espaços à direita

  • Todos os literais

Por exemplo, utilize a declaração a seguir.

/*Leading comment*/ EXPLAIN SELECT /* Query 1 */ * FROM t WHERE x > 7 AND y = 1;

O gerenciamento de planos de consulta normaliza essa declaração da seguinte maneira:

SELECT /* Query 1 */ * FROM t WHERE x > CONST AND y = CONST;

A normalização permite que o mesmo hash SQL seja utilizado para declarações SQL semelhantes que só podem ter diferenças nos valores literais ou de parâmetro. Em outras palavras, podem existir vários planos para o mesmo hash SQL, com um plano diferente que é ideal em condições diferentes.

nota

Uma única declaração SQL utilizada com esquemas diferentes tem planos diferentes porque está vinculada ao esquema específico em tempo de execução. O planejador usa as estatísticas para vinculação do esquema para selecionar o plano ideal.

Para saber mais sobre como o otimizador seleciona um plano, consulte Usar planos gerenciados do Aurora PostgreSQL. Nessa seção, você pode aprender a usar EXPLAIN e EXPLAIN ANALYZE e visualizar um plano antes que ele seja realmente utilizado. Para obter detalhes, consulte Analisar o plano selecionado pelo otimizador. Para obter uma imagem que descreve o processo de seleção de um plano, consulte Como o otimizador escolhe que plano executar..