Este documento descreve como melhorar o desempenho do plano de consulta através da gestão de planos de consulta no AlloyDB for PostgreSQL. A gestão de planos de consultas monitoriza continuamente todos os planos de consultas e as respetivas estatísticas de execução na sua base de dados. Depois de rever as consultas e os custos associados, pode aprovar um plano que é aplicado de forma consistente a uma determinada consulta. Esta abordagem garante a seleção de um plano de consulta económico, o que leva a um melhor desempenho das consultas.
Como funciona
No PostgreSQL, um otimizador de consultas seleciona um plano de execução para cada consulta com base nos custos estimados. Muitos fatores influenciam o custo da consulta, por exemplo, os parâmetros da consulta, a complexidade da consulta, o tamanho da tabela, os índices disponíveis e os recursos do sistema.
Como os parâmetros de consulta podem mudar com cada execução de consulta, selecionar um plano de consulta dinamicamente pode nem sempre gerar resultados ideais. Ao processar uma consulta, o otimizador avalia vários planos de execução e tenta escolher o plano mais rentável.
Uma alteração de parâmetros pode resultar numa alteração do plano. Embora o plano selecionado seja normalmente a opção mais rentável, podem existir instâncias em que é escolhido um plano menos rentável, o que resulta num mau desempenho das consultas. A gestão de planos de consultas ajuda a compreender os padrões e os planos produzidos pelo otimizador e permite ver cada plano para tomar decisões informadas.
Os dois componentes principais da gestão de planos de consulta são os seguintes:
- Repositório de planos de consultas
- Quando ativa a gestão de planos de consulta para a sua base de dados, o repositório de planos começa a acompanhar os planos históricos e as estatísticas de execução na sua base de dados. O repositório de planos de consulta oferece observabilidade sobre o desempenho do plano de consulta.
- Gestão de planos
- Depois de rever os planos disponíveis, o componente de gestão de planos permite-lhe aprovar um ou mais planos para um modelo de consulta específico. A gestão de planos de consultas acompanha estes planos aprovados e garante que, quando a consulta é executada posteriormente, o otimizador de consultas usa apenas um dos planos aprovados. Se forem aprovados vários planos, o AlloyDB seleciona e executa o plano com o custo estimado mais baixo.
Antes de começar
- Defina a flag da base de dados
google_plan_management.enabledcomoon. Para mais informações, consulte o artigo Configure flags da base de dados. - Crie a extensão
google_plan_managementna base de dados. Para mais informações, consulte Ative uma extensão. Conceda
google_plan_management_roleaos utilizadores da base de dados que querem usar a gestão de planos de consultas e gerir planos de consultas.Na Google Cloud consola, aceda à página Clusters do AlloyDB.
Clique na instância necessária.
Clique em AlloyDB Studio e, de seguida, clique no separador Editor 1.
Introduza a seguinte consulta:
GRANT google_plan_management_role TO DATABASE_USER;Substitua
DATABASE_USERpelo utilizador ao qual quer conceder a função.Clique em Executar.
Veja planos de consultas monitorizados
A gestão de planos de consulta oferece uma vista de plano de consulta que apresenta todos os planos de consulta rastreados, os respetivos tempos de execução e outras informações. Um plano de consulta monitorizado é um plano de consulta gerado pelo otimizador e armazenado no repositório de planos.
Para ver os planos monitorizados históricos, execute a seguinte consulta:
SELECT * FROM google_plan_management.tracked_plans_view;
A resposta da consulta é semelhante à seguinte:
db_id | 5
db_name | postgres
user_id | 16392
user_name | postgres
logical_query_id | 15480571796188147798
plan_id | 4740866759615354783
query | SELECT c1, c2, c3 FROM t1 WHERE c1 = 1;
plan | Seq Scan on public.t1 +
| Output: c1, c2, c3 +
| Filter: (t1.c1 = ?)
total_execution_time | 0.003937501
num_executions | 1
creation_time | 2024-11-06 16:52:25.200737+00
last_used_time | 2024-11-06 16:52:25.200737+00
Desative o acompanhamento do plano de consulta
Se não quiser que a gestão de planos de consultas acompanhe os planos de consultas gerados pelo otimizador, tem de desativar a flag da base de dados google_plan_management.enable_track_plans. Esta flag está ativada por predefinição e recomendamos que a mantenha ativada. Para mais informações, consulte o artigo Configure
database flags.
Veja planos geridos
Pode ver todas as consultas e planos geridos pela gestão de planos de consultas, incluindo os planos aprovados e recusados.
Para ver os planos geridos, execute a seguinte consulta:
SELECT * FROM google_plan_management.managed_plans_view;
A resposta da consulta é semelhante à seguinte:
db_id | 5
db_name | postgres
user_id | 16392
user_name | postgres
logical_query_id | 15480571796188147798
plan_id | 4740866759615354783
status | approved
Aprove um plano
O otimizador seleciona um plano de consulta dinamicamente, o que significa que pode escolher diferentes planos de consulta para a mesma consulta em diferentes momentos. Para aplicar uma seleção de planos consistente, pode usar a gestão de planos de consulta para aprovar um ou mais planos de consulta para uma determinada consulta.
Se aprovar vários planos, a gestão de planos compara todos os planos aprovados e seleciona o plano mais rentável para a execução de consultas.
Para avaliar e aprovar um plano para uma consulta, siga estes passos:
Veja os planos monitorizados que o otimizador gerou e identifique o
logical_query_idna resposta.Reveja todos os planos gerados para o
logical_query_id. Pode calcular o tempo de execução médio de cada plano através dos valorestotal_execution_timeenum_executionse, em seguida, decidir qual o melhor plano para a sua consulta.A coluna
planinclui outros detalhes, como o índice usado ou o método de ordenação usado, que podem ajudar a decidir sobre um plano de consulta.Aprove o plano que quer aplicar à consulta executando a seguinte consulta:
SELECT google_plan_management.approve_plan(QUERY_ID, PLAN_ID);Substitua o seguinte:
QUERY_ID: ological_query_idexclusivo para a consulta. Cada ID de consulta pode estar associado a vários IDs de planos.PLAN_ID: oplan_idexclusivo da consulta.
Recuse um plano
Pode recusar qualquer plano aprovado para uma consulta e impedir que a gestão de planos de consultas aplique o plano à consulta. Os planos recusados não são eliminados e estão disponíveis na lista de planos monitorizados.
Para recusar um plano aprovado, execute a seguinte consulta:
SELECT google_plan_management.deny_plan(QUERY_ID, PLAN_ID);
Elimine um plano aprovado
Pode eliminar um plano aprovado do repositório de planos. Quando elimina um plano aprovado, este deixa de aparecer na lista de planos geridos.
Para eliminar um plano aprovado, execute a seguinte consulta:
SELECT google_plan_management.update_plan_status(QUERY_ID, PLAN_ID, 'delete');
Deixe de usar temporariamente planos aprovados
Se quiser parar temporariamente de usar planos aprovados para as suas consultas, tem de desativar a flag da base de dados google_plan_management.enable_steer_plans.
Esta sinalização está ativada por predefinição. Para mais informações, consulte o artigo Configure as flags da base de dados.
Limitações
- Não pode usar a gestão de planos de consulta em tabelas particionadas nem em conjuntos de agrupamento.
- A gestão do plano de consulta só é suportada na instância principal.
- O repositório de planos de consultas pode armazenar até 100 mil planos únicos e não oferece uma política de retenção.
O que se segue?
- Saiba mais sobre o motor de colunas do AlloyDB para PostgreSQL
- Use o consultor de índices com as informações sobre consultas