

# Práticas recomendadas para gerenciamento de planos de consultas do Aurora PostgreSQL
<a name="AuroraPostgreSQL.Optimize.BestPractice"></a>

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. 

**Contents**
+ [Gerenciamento de planos proativo para ajudar a evitar a regressão de performance](#AuroraPostgreSQL.Optimize.BestPractice.Proactive)
  + [Garantir a estabilidade do plano após a atualização da versão principal](#AuroraPostgreSQL.Optimize.BestPractice.MajorVersionUpgrade)
+ [Gerenciamento de planos reativo para detectar e reparar regressões de performance](#AuroraPostgreSQL.Optimize.BestPractice.Reactive)

## Gerenciamento de planos proativo para ajudar a evitar a regressão de performance
<a name="AuroraPostgreSQL.Optimize.BestPractice.Proactive"></a>

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](AuroraPostgreSQL.Optimize.CapturePlans.md#AuroraPostgreSQL.Optimize.CapturePlans.Manual) e [Capturar planos automaticamente](AuroraPostgreSQL.Optimize.CapturePlans.md#AuroraPostgreSQL.Optimize.CapturePlans.Automatic). 

1. 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 gerenciados do Aurora PostgreSQL](AuroraPostgreSQL.Optimize.Maintenance.ExportingImporting.md). 

1. 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](AuroraPostgreSQL.Optimize.UsePlans.md). 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](AuroraPostgreSQL.Optimize.CapturePlans.md#AuroraPostgreSQL.Optimize.CapturePlans.Automatic). 

1. Analise os planos não aprovados e confirme os que apresentam boa performance. Para obter mais informações, consulte [Avaliar performance do plano](AuroraPostgreSQL.Optimize.Maintenance.md#AuroraPostgreSQL.Optimize.Maintenance.EvaluatingPerformance). 

1. 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
<a name="AuroraPostgreSQL.Optimize.BestPractice.MajorVersionUpgrade"></a>

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\$1plan\$1execution\$1threshold. Você pode maximizar a estabilidade do plano usando o estilo proativo de gerenciamento do plano com o parâmetro evolve\$1plan\$1baselines. 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](AuroraPostgreSQL.Optimize.UsePlans.md). 

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](AuroraPostgreSQL.Optimize.CapturePlans.md#AuroraPostgreSQL.Optimize.CapturePlans.Automatic). 

1. Avalie a performance de cada plano. Para obter mais informações, consulte [Avaliar performance do plano](AuroraPostgreSQL.Optimize.Maintenance.md#AuroraPostgreSQL.Optimize.Maintenance.EvaluatingPerformance).

1. 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](AuroraPostgreSQL.Optimize.Maintenance.md#AuroraPostgreSQL.Optimize.Maintenance.EvaluatingPerformance.Approving). Para obter informações de referência sobre essa função, consulte [apg\$1plan\$1mgmt.evolve\$1plan\$1baselines](AuroraPostgreSQL.Optimize.Functions.md#AuroraPostgreSQL.Optimize.Functions.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](https://aws.amazon.com/blogs/database/ensuring-consistent-performance-after-major-version-upgrades-with-amazon-aurora-postgresql-query-plan-management/). 

**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](AuroraPostgreSQL.MajorVersionUpgrade.md).

## Gerenciamento de planos reativo para detectar e reparar regressões de performance
<a name="AuroraPostgreSQL.Optimize.BestPractice.Reactive"></a>

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](AuroraPostgreSQL.Optimize.UsePlans.md) e [Capturar planos automaticamente](AuroraPostgreSQL.Optimize.CapturePlans.md#AuroraPostgreSQL.Optimize.CapturePlans.Automatic). 

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

1. 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](AuroraPostgreSQL.Optimize.Maintenance.md#AuroraPostgreSQL.Optimize.Maintenance.EvaluatingPerformance.Rejecting). 

   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\$1hint\$1plan](AuroraPostgreSQL.Optimize.Maintenance.md#AuroraPostgreSQL.Optimize.Maintenance.pg_hint_plan). 