Noções básicas sobre o 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 instrução SQL processada mais de uma vez. O otimizador sempre define o status do primeiro plano gerado de uma instrução gerenciada como Approved
e o armazena na visualização dba_plans
.
O conjunto de planos aprovados salvos para uma instrução gerenciada é conhecido como linha de base de planos. Enquanto a aplicação é executada, o otimizador pode gerar planos adicionais para as instruçõ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 dosql_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.
Normalização e o hash SQL
Na visualização apg_plan_mgmt.dba_plans
, identifique uma instrução gerenciada com um valor de hash SQL. O hash SQL é calculado com base em uma representação normalizada da instrução SQL que remove algumas diferenças, como os valores literais.
O processo de normalização de cada instrução SQL preserva espaço e maiúsculas e minúsculas, para que você ainda possa ler e entender a essência da instruçã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 instrução a seguir.
/*Leading comment*/ EXPLAIN SELECT /* Query 1 */ * FROM t WHERE x > 7 AND y = 1;
O otimizador normaliza essa instrução da maneira a seguir.
SELECT /* Query 1 */ * FROM t WHERE x > CONST AND y = CONST;
A normalização permite que o mesmo hash SQL seja utilizado para instruçõ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 instruçã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 mais 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..