

# Capturar planos de execução do Aurora PostgreSQL
<a name="AuroraPostgreSQL.Optimize.CapturePlans"></a>

O gerenciamento de planos de consulta do Aurora PostgreSQL oferece dois modos diferentes para capturar planos de execução de consultas: automático ou manual. Você seleciona o modo definindo o valor de `apg_plan_mgmt.capture_plans_baselines` como `automatic` ou `manual`. Você pode capturar planos de execução para instruções SQL específicas usando a captura de plano manual. Como alternativa, você pode capturar todos (ou os mais lentos) os planos executados duas ou mais vezes durante as execuções do aplicativo usando a captura de plano automática.

Ao capturar planos, o otimizador define o status do primeiro plano capturado de uma instrução gerenciada como `approved`. O otimizador define o status de todos os planos adicionais capturados para uma instrução gerenciada como `unapproved`. No entanto, mais de um plano pode, ocasionalmente, ser salvo com o status de `approved`. Isso pode ocorrer quando vários planos são criados para uma instrução em paralelo e antes da confirmação do primeiro plano da instrução.

Para controlar o número máximo de planos que podem ser capturados e armazenados na visualização `dba_plans`, defina o parâmetro `apg_plan_mgmt.max_plans` no grupo de parâmetros no nível de instância de banco de dados. Uma alteração feita no parâmetro `apg_plan_mgmt.max_plans` exige a reinicialização de uma instância de banco de dados para que um novo valor entre em vigor. Para obter mais informações, consulte o parâmetro [apg\$1plan\$1mgmt.max\$1plans](AuroraPostgreSQL.Optimize.Parameters.md#AuroraPostgreSQL.Optimize.Parameters.max_plans). 

## Capturar manualmente planos para instruções SQL específicas
<a name="AuroraPostgreSQL.Optimize.CapturePlans.Manual"></a>

Caso você tenha um conjunto conhecido de instruções SQL a serem gerenciadas, coloque as instruções em um arquivo SQL e capture manualmente os planos. A seguir, um exemplo de psql de como capturar planos de consulta manualmente para um conjunto de instruções SQL.

```
psql> SET apg_plan_mgmt.capture_plan_baselines = manual;
psql> \i my-statements.sql 
psql> SET apg_plan_mgmt.capture_plan_baselines = off;
```

Depois de capturar um plano para cada instrução SQL, o otimizador adicionará uma nova linha à visualização `apg_plan_mgmt.dba_plans`.

Recomendamos usar instruções EXPLAIN ou EXPLAIN EXECUTE no arquivo script do SQL. Garanta a inclusão de variações suficientes em valores de parâmetros para capturar todos os planos de interesse.

Se você conhecer um plano melhor do que o plano de custo mínimo do otimizador, poderá forçar o otimizador a usar o plano melhor. Para isso, especifique uma ou mais dicas do otimizador. Para obter mais informações, consulte [Corrigir planos usando pg\$1hint\$1plan](AuroraPostgreSQL.Optimize.Maintenance.md#AuroraPostgreSQL.Optimize.Maintenance.pg_hint_plan). Para comparar a performance dos planos `unapproved` e `approved` e aprovar, rejeitar ou excluí-los, consulte [Avaliar performance do plano](AuroraPostgreSQL.Optimize.Maintenance.md#AuroraPostgreSQL.Optimize.Maintenance.EvaluatingPerformance). 

## Capturar planos automaticamente
<a name="AuroraPostgreSQL.Optimize.CapturePlans.Automatic"></a>

Use a captura de planos automática em situações como a seguinte:
+ Você não sabe as instruções SQL específicas que deseja gerenciar.
+ Você tem centenas ou milhares de instruções SQL a serem gerenciadas.
+ O aplicativo usa uma API cliente. Por exemplo, o JDBC usa instruções preparadas não nomeadas ou instruções de modo em lote que não podem ser expressadas em psql.

**Para capturar planos automaticamente**

1. Ative a captura de planos automática definindo `apg_plan_mgmt.capture_plan_baselines` como `automatic` no grupo de parâmetros no nível da instância de banco de dados. Para obter mais informações, consulte [Modificar parâmetros em um grupo de parâmetros de banco de dados no Amazon Aurora](USER_WorkingWithParamGroups.Modifying.md). 

1. Quando o aplicativo é executado, o otimizador captura planos de todas as instruções SQL executadas pelo menos duas vezes.

   Quando o aplicativo é executado com as configurações do parâmetro de gerenciamento de planos de consultas padrão, o otimizador captura planos de todas as instruções SQL executadas pelo menos duas vezes. Capturar todos os planos usando os padrões tem pouquíssimos custos indiretos no tempo de execução e pode ser habilitado na produção.

**Para desativar a captura de planos automática**
+ Defina o parâmetro `apg_plan_mgmt.capture_plan_baselines` como `off` do grupo de parâmetros no nível de instância de banco de dados.

Para avaliar a performance dos planos não aprovados e aprovar, rejeitar ou excluí-los, consulte [Avaliar performance do plano](AuroraPostgreSQL.Optimize.Maintenance.md#AuroraPostgreSQL.Optimize.Maintenance.EvaluatingPerformance). 