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 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 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..