O gerenciamento de plano de consulta no AlloyDB para PostgreSQL permite melhorar e estabilizar o desempenho das consultas, controlando quais planos de execução o otimizador de consultas usa para suas consultas. O gerenciamento de plano de consulta rastreia continuamente todos os planos de consulta e as estatísticas de execução deles no banco de dados. Depois de analisar os planos e os custos deles, você pode aprovar os planos que quer que o AlloyDB use para uma consulta. Isso ajuda a evitar lentidões que ocorrem quando o otimizador muda para um plano menos econômico.
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, como parâmetros, complexidade, tamanho da tabela, índices disponíveis e recursos do sistema.
Como os parâmetros de consulta podem mudar a cada execução, selecionar um plano de consulta dinamicamente nem sempre gera resultados ideais. Ao processar uma consulta, o otimizador avalia vários planos de execução e tenta escolher o mais econômico.
Uma mudança de parâmetro pode resultar em uma mudança de plano. Embora o plano selecionado geralmente seja a opção mais econômica, pode haver casos em que um plano menos econômico é escolhido, o que resulta em um desempenho ruim da consulta. O gerenciamento de plano de consulta ajuda a entender os padrões e planos produzidos pelo otimizador e permite visualizar cada plano para tomar decisões fundamentadas.
Os dois componentes principais do gerenciamento de plano de consulta são os seguintes:
- Repositório de plano de consulta
- Quando você ativa o gerenciamento de plano de consulta para seu banco de dados, o repositório de planos começa a rastrear planos históricos e estatísticas de execução no banco de dados. O repositório de plano de consulta oferece observabilidade sobre o desempenho do plano de consulta.
- Gerenciamento de planos
- Depois de analisar os planos disponíveis, o componente de gerenciamento de planos permite aprovar um ou mais planos para um modelo de consulta específico. O gerenciamento de plano de consulta rastreia esses planos aprovados e garante que, quando a consulta for executada, o otimizador de consulta use apenas um dos planos aprovados. Se vários planos forem aprovados, o AlloyDB vai selecionar e executar o plano com o menor custo estimado.
Antes de começar
- Defina a flag de banco de dados
google_plan_management.enabledcomoon. Para mais informações, consulte Configurar flags de banco de dados. - Crie a extensão
google_plan_managementno banco de dados. Para mais informações, consulte Ativar uma extensão. Conceda
google_plan_management_roleaos usuários do banco de dados que querem usar o gerenciamento de plano de consulta e gerenciar planos de consulta.No console do Google Cloud , acesse a página Clusters do AlloyDB.
Clique na instância necessária.
Clique em AlloyDB Studio e, em seguida, na guia Editor 1.
Digite a seguinte consulta:
GRANT google_plan_management_role TO DATABASE_USER;Substitua
DATABASE_USERpelo usuário a quem você quer conceder o papel.Clique em Executar.
Ver planos de consulta monitorados
O gerenciamento de plano de consulta oferece uma visualização que mostra todos os planos de consulta rastreados, os tempos de execução deles e outras informações. Um plano de consulta rastreado é um plano de consulta gerado pelo otimizador e armazenado no repositório de planos.
Para ver os planos históricos rastreados, execute a seguinte consulta:
SELECT * FROM google_plan_management.tracked_plans_view;
A resposta à consulta é semelhante a esta:
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
Desativar o rastreamento do plano de consulta
Se você não quiser que o gerenciamento de plano de consulta rastreie os planos de consulta gerados pelo
otimizador, desative a
flag de banco de dados google_plan_management.enable_track_plans. Essa flag é ativada
por padrão, e recomendamos que você a deixe ativada. Para mais informações, consulte Configurar
flags de banco de dados.
Ver planos gerenciados
É possível ver todas as consultas e planos gerenciados pelo gerenciamento de plano de consulta, incluindo planos aprovados e negados.
Para ver os planos gerenciados, execute a seguinte consulta:
SELECT * FROM google_plan_management.managed_plans_view;
A resposta à consulta é semelhante a esta:
db_id | 5
db_name | postgres
user_id | 16392
user_name | postgres
logical_query_id | 15480571796188147798
plan_id | 4740866759615354783
status | approved
Aprovar um plano
O otimizador seleciona um plano de consulta dinamicamente, o que significa que ele pode escolher planos de consulta diferentes para a mesma consulta em momentos diferentes. Para aplicar uma seleção de plano consistente, use o gerenciamento de plano de consulta para aprovar um ou mais planos de consulta para uma determinada consulta.
Se você aprovar vários planos, o gerenciamento de planos de consulta vai comparar todos os planos aprovados e selecionar o mais econômico para a execução da consulta.
Para avaliar e aprovar um plano para uma consulta, siga estas etapas:
Veja os planos rastreados que o otimizador gerou e identifique o
logical_query_idna resposta.Revise todos os planos gerados para o
logical_query_id. É possível calcular o tempo médio de execução de cada plano usando os valorestotal_execution_timeenum_executionse, em seguida, decidir o melhor plano para sua consulta.A coluna
planinclui outros detalhes, como o índice ou o método de classificação usado, que podem ajudar você a decidir sobre um plano de consulta.Aprove o plano que você quer aplicar à consulta executando a seguinte consulta:
SELECT google_plan_management.approve_plan(QUERY_ID, PLAN_ID);Substitua:
QUERY_ID: ological_query_idexclusivo da consulta. Cada ID de consulta pode estar associado a vários IDs de plano.PLAN_ID: oplan_idexclusivo da consulta.
Negar um plano
É possível negar qualquer plano aprovado para uma consulta e impedir que o gerenciamento de plano de consulta aplique o plano à consulta. Os planos negados não são excluídos e estão disponíveis na lista de planos rastreados.
Para negar um plano aprovado, execute a seguinte consulta:
SELECT google_plan_management.deny_plan(QUERY_ID, PLAN_ID);
Excluir um plano aprovado
É possível excluir um plano aprovado do repositório de planos. Quando você exclui um plano aprovado, ele não aparece mais na lista de planos gerenciados.
Para excluir um plano aprovado, execute a seguinte consulta:
SELECT google_plan_management.update_plan_status(QUERY_ID, PLAN_ID, 'delete');
Interromper temporariamente o uso de planos aprovados
Se você quiser interromper temporariamente o uso de planos aprovados para suas consultas, desative a flag de banco de dados google_plan_management.enable_steer_plans.
Essa sinalização é ativada por padrão. Para mais informações, consulte Configurar flags de banco de dados.
Limitações
- Não é possível usar o gerenciamento de plano de consulta em tabelas particionadas ou conjuntos de agrupamento.
- O gerenciamento de plano de consulta só é compatível com a instância principal.
- O repositório de plano de consulta pode armazenar até 100 mil planos exclusivos e não oferece uma política de retenção.
A seguir
- Aprenda mais sobre o mecanismo colunar do AlloyDB para PostgreSQL
- Usar o consultor de índice com o Query Insights