

# Referência de funções do gerenciamento de planos de consultas do Aurora PostgreSQL
<a name="AuroraPostgreSQL.Optimize.Functions"></a>

A extensão `apg_plan_mgmt` fornece as funções a seguir.

**Topics**
+ [apg\_plan\_mgmt.copy\_outline](#AuroraPostgreSQL.Optimize.Functions.copy_outline)
+ [apg\_plan\_mgmt.delete\_plan](#AuroraPostgreSQL.Optimize.Functions.delete_plan)
+ [apg\_plan\_mgmt.evolve\_plan\_baselines](#AuroraPostgreSQL.Optimize.Functions.evolve_plan_baselines)
+ [apg\_plan\_mgmt.get\_explain\_plan](#AuroraPostgreSQL.Optimize.Functions.get_explain_plan)
+ [apg\_plan\_mgmt.plan\_last\_used](#AuroraPostgreSQL.Optimize.Functions.plan_last_used)
+ [apg\_plan\_mgmt.reload](#AuroraPostgreSQL.Optimize.Functions.reload)
+ [apg\_plan\_mgmt.set\_plan\_enabled](#AuroraPostgreSQL.Optimize.Functions.set_plan_enabled)
+ [apg\_plan\_mgmt.set\_plan\_status](#AuroraPostgreSQL.Optimize.Functions.set_plan_status)
+ [apg\_plan\_mgmt.update\_plans\_last\_used](#AuroraPostgreSQL.Optimize.Functions.update_plans_last_used)
+ [apg\_plan\_mgmt.validate\_plans](#AuroraPostgreSQL.Optimize.Functions.validate_plans)

## apg\_plan\_mgmt.copy\_outline
<a name="AuroraPostgreSQL.Optimize.Functions.copy_outline"></a>

Copie um determinado hash do plano SQL e o esboço do plano para um hash e um esboço do plano SQL de destino, substituindo assim o hash e o esboço do plano de destino. Essa função está disponível no `apg_plan_mgmt` 2.3 e superiores. 

**Sintaxe**

```
apg_plan_mgmt.copy_outline(
    source_sql_hash,
    source_plan_hash,
    target_sql_hash,
    target_plan_hash,
    force_update_target_plan_hash
)
```

**Valor de retorno**  
Retorna 0 quando a cópia é bem-sucedida. Gera exceções para entradas inválidas.

**Parâmetros**


****  

| Parâmetro | Descrição | 
| --- | --- | 
| source\_sql\_hash  | O ID sql\_hash associado ao plan\_hash a ser copiado na consulta de destino. | 
| source\_plan\_hash  | O ID plan\_hash a ser copiado na consulta de destino. | 
| target\_sql\_hash | O ID sql\_hash da consulta a ser atualizada com o hash e o esboço do plano de origem. | 
| target\_plan\_hash | O ID plan\_hash da consulta a ser atualizada com o hash e o esboço do plano de origem. | 
| force\_update\_target\_plan\_hash | (Opcional) O ID target\_plan\_hash da consulta é atualizado mesmo que o plano de origem não seja reproduzível para o target\_sql\_hash. Quando definida como verdadeira, a função pode ser usada para copiar planos em esquemas em que os nomes e as colunas das relações são consistentes. | 

**Observações de uso**

Essa função permite que você copie um hash do plano e um esboço do plano que usam dicas para outras declarações semelhantes e, assim, evita que você precise usar instruções de dica em linha em cada ocorrência nas declarações de destino. Se a consulta de destino atualizada ocasionar um plano inválido, essa função gerará um erro e reverterá a tentativa de atualização. 

## apg\_plan\_mgmt.delete\_plan
<a name="AuroraPostgreSQL.Optimize.Functions.delete_plan"></a>

Exclua um plano gerenciado. 

**Sintaxe**

```
apg_plan_mgmt.delete_plan(
    sql_hash,
    plan_hash
)
```

**Valor de retorno**  
Retorna 0 caso a exclusão tenha sido bem-sucedida ou -1 em caso de falha na exclusão.

**Parâmetros**


****  

| Parâmetro | Descrição | 
| --- | --- | 
| sql\_hash  | O ID sql\_hash da instrução SQL gerenciada do plano. | 
| plan\_hash | O ID plan\_hash do plano gerenciado. | 

 

## apg\_plan\_mgmt.evolve\_plan\_baselines
<a name="AuroraPostgreSQL.Optimize.Functions.evolve_plan_baselines"></a>

Verifica se um plano já aprovado é mais rápido ou se um plano identificado pelo otimizador de consultas como um plano de custo mínimo é mais rápido.

**Sintaxe**

```
apg_plan_mgmt.evolve_plan_baselines(
    sql_hash, 
    plan_hash,
    min_speedup_factor,
    action
)
```

**Valor de retorno**

O número de planos que não eram mais rápidos do que o melhor plano aprovado. 

**Parâmetros**


****  

| Parâmetro | Descrição | 
| --- | --- | 
| sql\_hash | O ID sql\_hash da instrução SQL gerenciada do plano. | 
| plan\_hash | O ID plan\_hash do plano gerenciado. Use NULL como média de todos os planos que tenham o mesmo valor de ID sql\_hash. | 
| min\_speedup\_factor | O *fator de agilização mínimo* pode ser o número de vezes mais rápido que um plano deve ser em relação ao melhor dos planos já aprovados para aprová-lo. Como alternativa, esse fator pode ser o número de vezes mais lento que um plano deve ser para rejeitá-lo ou desabilitá-lo.<br />Trata-se de um valor flutuante positivo. | 
| action | A ação que a função deve realizar. Entre os valores válidos estão os seguintes. O uso de maiúsculas ou minúsculas não importa. [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/AmazonRDS/latest/AuroraUserGuide/AuroraPostgreSQL.Optimize.Functions.html) | 

** Observações de uso**

Defina planos especificados como aprovados, rejeitados ou desabilitados com base na velocidade do planejamento mais o tempo de execução ser maior ou não que o melhor plano aprovado por um fator definido por você. O parâmetro de ação pode ser definido como `'approve'` ou `'reject'` para aprovar ou rejeitar automaticamente um plano que atenda aos critérios de performance. Como alternativa, ele pode ser definido como '' (string vazia) para realizar o experimento de performance e produzir um relatório, mas não realizar ação.

Você pode evitar a reexecução infundada da função `apg_plan_mgmt.evolve_plan_baselines` de um plano no qual ela foi executada recentemente. Para isso, restrinja os planos a apenas os planos não aprovados criados recentemente. Também é possível evitar executar a função `apg_plan_mgmt.evolve_plan_baselines` em qualquer plano aprovado que tenha um timestamp `last_verified` recente.

Realize um experimento de performance para comparar o tempo de planejamento mais execução de cada plano relativo aos outros planos na linha de base. Em alguns casos, talvez haja somente um plano para uma instrução e o plano seja aprovado. Nesse caso, compare o tempo de planejamento mais execução do plano com o tempo de planejamento mais execução de nenhum plano usado.

O benefício incremental (ou desvantagem) de cada plano é registrado na visualização `apg_plan_mgmt.dba_plans` na coluna `total_time_benefit_ms`. Quando esse valor é positivo, há uma vantagem de performance mensurável em incluir esse plano na linha de base.

Além de coletar o tempo de planejamento e execução de cada plano candidato, a coluna `last_verified` da visualização `apg_plan_mgmt.dba_plans` é atualizada com o `current_timestamp`. O time stamp `last_verified` pode ser usado para evitar a reexecução dessa função em um plano que recentemente teve a verificação da performance.

## apg\_plan\_mgmt.get\_explain\_plan
<a name="AuroraPostgreSQL.Optimize.Functions.get_explain_plan"></a>

Gera o texto de uma instrução `EXPLAIN` para a instrução SQL especificada. 

**Sintaxe**

```
apg_plan_mgmt.get_explain_plan(
    sql_hash,
    plan_hash,
    [explainOptionList]
)
```

**Valor de retorno**  
Retorna estatísticas de tempo de execução para as instruções SQL especificadas. Use sem `explainOptionList` para retornar um plano `EXPLAIN` simples.

**Parâmetros**


****  

| Parâmetro | Descrição | 
| --- | --- | 
| sql\_hash  | O ID sql\_hash da instrução SQL gerenciada do plano. | 
| plan\_hash | O ID plan\_hash do plano gerenciado. | 
| explainOptionList | Uma lista separada por vírgulas com opções de explicação. Os valores válidos incluem `'analyze'`, `'verbose'`, `'buffers'`, `'hashes'` e `'format json'`. Se a lista de `explainOptionList` for NULL (NULA) ou uma string vazia (''), essa função gerará uma instrução `EXPLAIN` sem nenhuma estatística. | 

 

**Observações de uso**

Para a `explainOptionList`, você pode usar qualquer uma das mesmas opções que você usaria com uma instrução `EXPLAIN`. O otimizador do Aurora PostgreSQL concatena a lista de opções que você fornece à instrução `EXPLAIN`.

## apg\_plan\_mgmt.plan\_last\_used
<a name="AuroraPostgreSQL.Optimize.Functions.plan_last_used"></a>

Retorna a data `last_used` do plano especificado da memória compartilhada. 

**nota**  
O valor na memória compartilhada é sempre atual na instância de banco de dados primária do cluster de banco de dados. Esse valor é apenas periodicamente liberado na coluna `last_used` da visualização `apg_plan_mgmt.dba_plans`.

**Sintaxe**

```
apg_plan_mgmt.plan_last_used(
    sql_hash,
    plan_hash
)
```

**Valor de retorno**  
Retorna a data `last_used`.

**Parâmetros**


****  

| Parâmetro | Descrição | 
| --- | --- | 
| sql\_hash  | O ID sql\_hash da instrução SQL gerenciada do plano. | 
| plan\_hash | O ID plan\_hash do plano gerenciado. | 

 

## apg\_plan\_mgmt.reload
<a name="AuroraPostgreSQL.Optimize.Functions.reload"></a>

Recarregue planos na memória compartilhada da visualização `apg_plan_mgmt.dba_plans`. 

**Sintaxe**

```
apg_plan_mgmt.reload()
```

**Valor de retorno**

Nenhum.

**Parâmetros**

Nenhum.

** Observações de uso**

Chame `reload` para as seguintes situações:
+ Use-o para atualizar a memória compartilhada de uma réplica somente leitura imediatamente, em vez de aguardar a propagação de novos planos para a réplica.
+ Use-o após a importação de planos gerenciados.



## apg\_plan\_mgmt.set\_plan\_enabled
<a name="AuroraPostgreSQL.Optimize.Functions.set_plan_enabled"></a>

Habilite ou desabilite um plano gerenciado.

**Sintaxe**

```
apg_plan_mgmt.set_plan_enabled(
    sql_hash, 
    plan_hash, 
    [true | false]
)
```

**Valor de retorno**

Retorna 0 caso a definição tenha sido bem-sucedida ou -1 em caso de falha na definição.

**Parâmetros**


****  

| Parâmetro | Descrição | 
| --- | --- | 
| sql\_hash | O ID sql\_hash da instrução SQL gerenciada do plano. | 
| plan\_hash | O ID plan\_hash do plano gerenciado. | 
| enabled | Valores boolianos de verdadeiro ou falso:[See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/AmazonRDS/latest/AuroraUserGuide/AuroraPostgreSQL.Optimize.Functions.html) | 

 

## apg\_plan\_mgmt.set\_plan\_status
<a name="AuroraPostgreSQL.Optimize.Functions.set_plan_status"></a>

Defina o status de um plano gerenciado como `Approved`, `Unapproved`, `Rejected`, ou `Preferred`.

**Sintaxe**

```
apg_plan_mgmt.set_plan_status(
    sql_hash, 
    plan_hash, 
    status
)
```

**Valor de retorno**

Retorna 0 caso a definição tenha sido bem-sucedida ou -1 em caso de falha na definição.

**Parâmetros**


****  

| Parâmetro | Descrição | 
| --- | --- | 
| sql\_hash | O ID sql\_hash da instrução SQL gerenciada do plano. | 
| plan\_hash | O ID plan\_hash do plano gerenciado. | 
| status | Uma string com um dos seguintes valores:[See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/AmazonRDS/latest/AuroraUserGuide/AuroraPostgreSQL.Optimize.Functions.html)<br />A formatação de maiúsculas/minúsculas usada não importa. No entanto, o valor do status é definido com maiúsculas iniciais na visualização `apg_plan_mgmt.dba_plans`. Para obter mais informações sobre esses valores, consulte `status` em [Referência da visualização apg\_plan\_mgmt.dba\_plans da edição compatível do Aurora PostgreSQL](AuroraPostgreSQL.Optimize.dba_plans_view_Reference.md).  | 

 

## apg\_plan\_mgmt.update\_plans\_last\_used
<a name="AuroraPostgreSQL.Optimize.Functions.update_plans_last_used"></a>

Atualiza imediatamente a tabela de planos com a data de `last_used` armazenada na memória compartilhada.

**Sintaxe**

```
apg_plan_mgmt.update_plans_last_used()
```

**Valor de retorno**

Nenhum.

**Parâmetros**

Nenhum.

** Observações de uso**

Chame `update_plans_last_used` para garantir que as consultas na coluna `dba_plans.last_used` usem as informações mais atuais. Se a data `last_used` não for atualizada imediatamente, um processo em segundo plano atualizará a tabela de planos com a data de `last_used` uma vez a cada hora (por padrão).

Por exemplo, se uma instrução com um determinado `sql_hash` começar a ser executada lentamente, será possível determinar quais planos para essa instrução foram executados desde que a regressão de performance começou. Para fazer isso, primeiro descarregue os dados da memória compartilhada no disco para que as datas de `last_used` sejam atuais e, em seguida, consulte todos os planos de `sql_hash` da instrução com a regressão de performance. Na consulta, certifique-se de que a data de `last_used` seja igual ou posterior à data em que a regressão de performance começou. A consulta identifica o plano ou o conjunto de planos que pode ser o responsável pela regressão de performance. Você pode utilizar `apg_plan_mgmt.get_explain_plan` com `explainOptionList` definido como `verbose, hashes`. Também é possível utilizar `apg_plan_mgmt.evolve_plan_baselines` para analisar o plano e quaisquer planos alternativos que possam ter performance melhor.

A função `update_plans_last_used` tem efeito somente na instância de banco de dados primária do cluster de banco de dados.

## apg\_plan\_mgmt.validate\_plans
<a name="AuroraPostgreSQL.Optimize.Functions.validate_plans"></a>

Valide se o otimizador ainda pode recriar planos. O otimizador valida os planos `Approved`, `Unapproved` e `Preferred`, independentemente de o plano estar ativado ou desativado. Planos `Rejected` não são validados. Também é possível usar a função `apg_plan_mgmt.validate_plans` para excluir ou desabilitar planos inválidos.

**Sintaxe**

```
apg_plan_mgmt.validate_plans(
    sql_hash, 
    plan_hash, 
    action)
            
apg_plan_mgmt.validate_plans(
    action)
```

**Valor de retorno**

O número de planos inválidos.

**Parâmetros**


****  

| Parâmetro | Descrição | 
| --- | --- | 
| sql\_hash | O ID sql\_hash da instrução SQL gerenciada do plano. | 
| plan\_hash | O ID plan\_hash do plano gerenciado. Use NULL como média de todos os planos para o mesmo valor de ID sql\_hash. | 
| action | A ação que a função deve realizar em planos inválidos. Entre os valores de string válidos estão os seguintes. O uso de maiúsculas ou minúsculas não importa.[See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/AmazonRDS/latest/AuroraUserGuide/AuroraPostgreSQL.Optimize.Functions.html)<br />Todos os outros valores são tratados como strings vazias. | 

**Observações de uso**

Use a forma `validate_plans(action)` a fim de validar todos os planos gerenciados para todas as instruções gerenciadas em toda a exibição `apg_plan_mgmt.dba_plans`.

Use a forma `validate_plans(sql_hash, plan_hash, action)` para validar um plano gerenciado especificado com `plan_hash`, para uma instrução gerenciada especificada com `sql_hash`. 

Use a forma `validate_plans(sql_hash, NULL, action)` a fim de validar todos os planos gerenciados para a instrução gerenciada especificada com `sql_hash`.