Práticas recomendadas para gerenciamento de planos de consultas do Aurora PostgreSQL - Amazon Aurora

Práticas recomendadas para gerenciamento de planos de consultas do Aurora PostgreSQL

Com o gerenciamento de planos de consultas, você pode controlar como e quando os planos de execução de consultas mudam. Como DBA, suas principais metas ao usar o QPM incluem evitar regressões quando há alterações no banco de dados e controlar se o otimizador pode ou não usar um novo plano. A seguir, você pode encontrar algumas práticas recomendadas para o uso do gerenciamento de planos de consultas. As abordagens de gerenciamento de planos proativo e reativo diferem em relação a como e quando novos planos são aprovados para uso.

Gerenciamento de planos proativo para ajudar a evitar a regressão de performance

Para evitar que ocorram regressões de performance do plano, você evolui as linhas de base do plano executando um procedimento que compara a performance dos planos recém-descobertos com a performance da linha de base existente dos planos aprovados e, depois, aprova automaticamente o conjunto mais rápido de planos como a nova linha de base. Dessa forma, a linha de base dos planos melhora com o tempo, à medida que planos mais rápidos são descobertos.

  1. Em um ambiente de desenvolvimento, identifique as instruções SQL que tenham o maior impacto sobre a performance ou a produtividade do sistema. Em seguida, capture os planos dessas instruções conforme descrito em Capturar manualmente planos para instruções SQL específicas e Capturar planos automaticamente.

  2. Exporte os planos capturados do ambiente de desenvolvimento e os importe para o ambiente de produção. Para obter mais informações, consulte Exportar e importar planos.

  3. Na produção, execute o aplicativo e imponha o uso de planos gerenciados aprovados. Para obter mais informações, consulte Usar planos gerenciados do Aurora PostgreSQL. Enquanto o aplicativo estiver em execução, adicione também novos planos enquanto o otimizador os descobre. Para obter mais informações, consulte Capturar planos automaticamente.

  4. Analise os planos não aprovados e confirme os que apresentam boa performance. Para obter mais informações, consulte Avaliar performance do plano.

  5. Enquanto o aplicativo continua sendo executado, o otimizador começa a usar os novos planos conforme apropriado.

Garantir a estabilidade do plano após a atualização da versão principal

Toda versão principal do PostgreSQL inclui melhorias e alterações no otimizador de consulta projetadas para melhorar a performance. No entanto, os planos de execução de consultas gerados pelo otimizador em versões anteriores podem causar regressões de performance em versões atualizadas mais recentes. Você pode usar o gerenciador de planos de consulta para resolver esses problemas de performance e garantir a estabilidade do plano após a atualização da versão principal.

O otimizador sempre usa o plano aprovado de custo mínimo, mesmo que haja mais de um plano aprovado para a mesma instrução. Depois de uma atualização, o otimizador pode descobrir novos planos, mas eles serão salvos como planos não aprovados. Esses planos serão executados somente se aprovados usando o estilo reativo de gerenciamento do plano com o parâmetro unapproved_plan_execution_threshold. Você pode maximizar a estabilidade do plano usando o estilo proativo de gerenciamento do plano com o parâmetro evolve_plan_baselines. Isso compara a performance dos novos planos com os planos antigos e aprova ou rejeita planos que são pelo menos 10% mais rápidos do que o próximo melhor plano.

Após a atualização, você pode usar a função evolve_plan_baselines para comparar a performance do plano antes e depois da atualização usando suas associações de parâmetros de consulta. As etapas a seguir pressupõem que você tenha usado planos gerenciados aprovados em seu ambiente de produção, conforme detalhado em Usar planos gerenciados do Aurora PostgreSQL.

  1. Antes de atualizar, execute sua aplicação com o gerenciador de planos de consulta em execução. Enquanto a aplicação estiver em execução, adicione novos planos à medida que o otimizador os descobrir. Para obter mais informações, consulte Capturar planos automaticamente.

  2. Avalie a performance de cada plano. Para obter mais informações, consulte Avaliar performance do plano.

  3. Após a atualização, analise seus planos aprovados novamente usando a função evolve_plan_baselines. Compare a performance antes e depois de usar as associações de parâmetros de consulta. Se o novo plano for rápido, você poderá adicioná-lo aos planos aprovados. Se for mais rápido do que outro plano para as mesmas associações de parâmetros, você poderá marcar o plano mais lento como Rejected (Rejeitado).

    Para obter mais informações, consulte Aprovar planos melhores. Para obter informações de referência sobre essa função, consulte apg_plan_mgmt.evolve_plan_baselines.

Para obter mais informações, consulte Garantir uma performance consistente após atualizações de versões principais com o gerenciamento de planos de consultas do Amazon Aurora edição compatível com PostgreSQL.

nota

Ao realizar uma atualização de versão principal usando a replicação lógica ou AWS DMS, replique o esquema apg_plan_mgmt para garantir que os planos existentes sejam copiados na instância atualizada. Para obter mais informações sobre replicação lógica, consulte Usar replicação lógica para realizar uma atualização de versão principal do Aurora PostgreSQL.

Gerenciamento de planos reativo para detectar e reparar regressões de performance

Ao monitorar a aplicação enquanto ela é executada, é possível detectar planos que causam regressões de performance. Ao detectar regressões, rejeite ou corrija manualmente os planos inadequados seguindo estas etapas:

  1. Enquanto o aplicativo estiver em execução, imponha o uso de planos gerenciados e adicione automaticamente planos recém-descobertos como não aprovados. Para obter mais informações, consulte Usar planos gerenciados do Aurora PostgreSQL e Capturar planos automaticamente.

  2. Monitore o aplicativo em execução em busca de regressões de performance.

  3. Ao descobrir uma regressão de plano, defina o status do plano como rejected. Na próxima vez em que executar a instrução SQL, o otimizador vai ignorar automaticamente o plano rejeitado e usar um plano aprovado diferente. Para obter mais informações, consulte Rejeitar ou desabilitar planos mais lentos.

    Em alguns casos, convém corrigir um plano inválido, em vez de rejeitar, desabilitar ou excluí-lo. Use a extensão pg_hint_plan para testar melhorando um plano. Com pg_hint_plan, você usa comentários especiais para informar o otimizador como ele normalmente cria um plano. Para obter mais informações, consulte Corrigir planos usando pg_hint_plan.