Excluir os planos de consulta do Aurora PostgreSQL
Exclua os planos de execução que você não está usando ou que não são válidos. Para ter mais informações sobre exclusão de planos, consulte as seções a seguir.
Tópicos
Excluir planos
Os planos serão excluídos automaticamente se não forem utilizados em mais de um mês, especificamente, 32 dias. Essa é a configuração padrão do parâmetro apg_plan_mgmt.plan_retention_period
. Você pode alterar o período de retenção do plano para um período mais longo ou mais curto, a partir do valor 1. A determinação do número de dias desde o último uso de um plano é calculada subtraindo a data last_used
da data atual. A data last_used
é a mais recente em que o otimizador selecionou um plano como plano de custo mínimo ou em que o plano foi executado. A data é armazenada para o plano na visualização apg_plan_mgmt.dba_plans
.
Recomendamos que você exclua planos que não tiverem sido usados por muito tempo ou que não tiverem sido úteis. Cada plano tem uma data last_used
atualizada pelo otimizador sempre que ele executa um plano ou o seleciona como o plano de custo mínimo para uma declaração. Confira as últimas datas last_used
para identificar os planos que você pode excluir com segurança.
A consulta a seguir retorna uma tabela de três colunas com a contagem do número total de planos, dos planos que não foram excluídos e dos planos que foram excluídos. Há uma consulta aninhada que é um exemplo de como usar a função apg_plan_mgmt.delete_plan
para excluir todos os planos que não tiverem sido selecionados como o plano de custo mínimo nos últimos 31 dias e o status não seja Rejected
.
SELECT (SELECT COUNT(*) from apg_plan_mgmt.dba_plans) total_plans, COUNT(*) FILTER (WHERE result = -1) failed_to_delete, COUNT(*) FILTER (WHERE result = 0) successfully_deleted FROM ( SELECT apg_plan_mgmt.delete_plan(sql_hash, plan_hash) as result FROM apg_plan_mgmt.dba_plans WHERE last_used < (current_date - interval '31 days') AND status <> 'Rejected' ) as dba_plans ;
total_plans | failed_to_delete | successfully_deleted
-------------+------------------+----------------------
3 | 0 | 2
Para obter mais informações, consulte apg_plan_mgmt.delete_plan.
Para excluir planos que não são válidos e que você espera que permaneçam inválidos, use a função apg_plan_mgmt.validate_plans
. Essa função permite excluir ou desabilitar planos inválidos. Para obter mais informações, consulte Validar planos.
Importante
Caso você não exclua planos divergentes, poderá acabar ficando sem memória compartilhada separada para o gerenciamento de planos de consultas. Para controlar a memória disponível para planos gerenciados, use o parâmetro apg_plan_mgmt.max_plans
. Defina esse parâmetro no grupo de parâmetros de banco de dados personalizado e reinicie a instância de banco de dados para que as alterações tenham efeito. Para obter mais informações, consulte o parâmetro apg_plan_mgmt.max_plans.
Validar planos
Use a função apg_plan_mgmt.validate_plans
para excluir ou desabilitar planos que sejam inválidos.
Os planos podem se tornar inválidos ou obsoletos quando objetos dependentes são removidos, como um índice ou uma tabela. No entanto, um plano só poderá ser inválido temporariamente se o objeto removido for recriado. Caso um plano inválido se torne válido depois, convém optar por desabilitar um plano inválido ou não fazer nada, em vez de excluí-lo.
Para encontrar e excluir todos os planos que sejam inválidos e que não tenham sido usados na semana passada, use a função apg_plan_mgmt.validate_plans
da maneira a seguir.
SELECT apg_plan_mgmt.validate_plans(sql_hash, plan_hash, 'delete')
FROM apg_plan_mgmt.dba_plans
WHERE last_used < (current_date - interval '7 days');
Para habilitar ou desabilitar diretamente um plano, use a função apg_plan_mgmt.set_plan_enabled
.