

# Gerenciamento de planos SQL em tempo real no RDS para Oracle
<a name="Oracle.RealTimeSPM"></a>

A partir do Oracle Database 26ai (26.0.0.0), o Amazon RDS para Oracle é compatível com o gerenciamento de planos SQL em tempo real. Esse recurso evita regressões de desempenho de SQL ao detectar alterações nos planos de execução, avaliá-las em relação a planos anteriores e selecionar, quando necessário, o plano com melhor desempenho de uma linha de base de plano SQL. Esse processo é transparente e não requer intervenção manual.

Para habilitar o gerenciamento de planos SQL em tempo real no RDS para Oracle, use `DBMS_SPM.CONFIGURE` para ativar a tarefa de evolução automática. Em seguida, use o pacote `rdsadmin.rdsadmin_spm_util` para configurar os parâmetros da tarefa pertencente ao SYS.

**Topics**
+ [Visão geral](#Oracle.RealTimeSPM.Overview)
+ [Requisitos](#Oracle.RealTimeSPM.Requirements)
+ [Habilitar o gerenciamento de planos SQL em tempo real](#Oracle.RealTimeSPM.Enabling)
+ [Como verificar a configuração](#Oracle.RealTimeSPM.Verifying)
+ [Desabilitar o gerenciamento de planos SQL em tempo real](#Oracle.RealTimeSPM.Disabling)
+ [rdsadmin\_spm\_util procedures](#Oracle.RealTimeSPM.Procedures)
+ [Monitorar linhas de base de planos SQL](#Oracle.RealTimeSPM.Monitoring)
+ [Considerações](#Oracle.RealTimeSPM.Considerations)
+ [Recursos relacionados](#Oracle.RealTimeSPM.Resources)

## Visão geral
<a name="Oracle.RealTimeSPM.Overview"></a>

Uma regressão de desempenho de SQL ocorre quando o otimizador do Oracle escolhe um novo plano de execução que apresenta desempenho inferior ao de um plano anterior. O gerenciamento de planos SQL em tempo real automatiza a detecção e a prevenção dessas regressões.

Quando o gerenciamento de planos SQL em tempo real está habilitado, o banco de dados faz o seguinte:

1. Detecta alterações nos planos de execução em tempo real.

1. Avalia o desempenho do novo plano em relação aos planos anteriores.

1. Cria ou atualiza automaticamente as linhas de base de planos SQL.

1. Seleciona o plano com melhor desempenho para evitar regressões.

## Requisitos
<a name="Oracle.RealTimeSPM.Requirements"></a>

Para usar o gerenciamento de planos SQL em tempo real, sua instância de banco de dados deve atender aos seguintes requisitos:
+ Oracle Database 26ai ou superior
+ Oracle Enterprise Edition

## Habilitar o gerenciamento de planos SQL em tempo real
<a name="Oracle.RealTimeSPM.Enabling"></a>

Para habilitar o gerenciamento de planos SQL em tempo real, conclua as duas etapas a seguir.

### Etapa 1: ativar a tarefa de evolução automática do SPM
<a name="Oracle.RealTimeSPM.Enabling.Step1"></a>

Execute a instrução a seguir como usuário mestre ou como um usuário com a função DBA:

```
BEGIN
  DBMS_SPM.CONFIGURE('AUTO_SPM_EVOLVE_TASK', 'AUTO');
END;
/
```

### Etapa 2: configurar os parâmetros da tarefa pertencente ao SYS
<a name="Oracle.RealTimeSPM.Enabling.Step2"></a>

A tarefa `SYS_AUTO_SPM_EVOLVE_TASK` pertence ao SYS. O RDS para Oracle fornece o pacote `rdsadmin.rdsadmin_spm_util` para essa finalidade.

Defina `ACCEPT_PLANS` como `TRUE` para que o banco de dados aceite automaticamente os planos evoluídos:

```
EXEC rdsadmin.rdsadmin_spm_util.set_evolve_task_accept_plans('TRUE');
```

(Opcional) Defina a origem alternativa do plano como `AUTO`:

```
EXEC rdsadmin.rdsadmin_spm_util.set_evolve_task_alternate_plan_source('AUTO');
```

## Como verificar a configuração
<a name="Oracle.RealTimeSPM.Verifying"></a>

Para verificar se o gerenciamento de planos SQL em tempo real está habilitado, execute a seguinte consulta:

```
SELECT parameter_value
FROM DBA_SQL_MANAGEMENT_CONFIG
WHERE parameter_name = 'AUTO_SPM_EVOLVE_TASK';
```

A consulta retorna `AUTO`.

Para verificar as configurações dos parâmetros da tarefa, execute a seguinte consulta:

```
SELECT parameter_name, parameter_value
FROM DBA_ADVISOR_PARAMETERS
WHERE task_name = 'SYS_AUTO_SPM_EVOLVE_TASK'
  AND parameter_name IN ('ACCEPT_PLANS', 'ALTERNATE_PLAN_SOURCE');
```

## Desabilitar o gerenciamento de planos SQL em tempo real
<a name="Oracle.RealTimeSPM.Disabling"></a>

Para desabilitar o gerenciamento de planos SQL em tempo real, execute a seguinte instrução:

```
BEGIN
  DBMS_SPM.CONFIGURE('AUTO_SPM_EVOLVE_TASK', 'OFF');
END;
/
```

## rdsadmin\_spm\_util procedures
<a name="Oracle.RealTimeSPM.Procedures"></a>

O pacote `rdsadmin.rdsadmin_spm_util` fornece os procedimentos a seguir.


**rdsadmin\_spm\_util procedures**  

| Procedimento | Parâmetro | Padrão | Descrição | 
| --- | --- | --- | --- | 
| `set_evolve_task_accept_plans` | `p_value` | `'TRUE'` | Define o parâmetro `ACCEPT_PLANS` para `SYS_AUTO_SPM_EVOLVE_TASK`. Os valores válidos são `'TRUE'` e `'FALSE'`. | 
| `set_evolve_task_alternate_plan_source` | `p_value` | `'AUTO'` | Define o parâmetro `ALTERNATE_PLAN_SOURCE` para `SYS_AUTO_SPM_EVOLVE_TASK`. Os valores válidos são `'AUTO'`, `'CURSOR_CACHE'`, `'AUTOMATIC_WORKLOAD_REPOSITORY'` e `'SQL_TUNING_SET'`. | 

## Monitorar linhas de base de planos SQL
<a name="Oracle.RealTimeSPM.Monitoring"></a>

Depois de habilitar o gerenciamento de planos SQL em tempo real, é possível monitorar as linhas de base de planos que o banco de dados gerencia automaticamente:

```
SELECT SQL_HANDLE, PLAN_NAME, ENABLED, ACCEPTED, AUTOPURGE
FROM DBA_SQL_PLAN_BASELINES
ORDER BY LAST_MODIFIED DESC;
```

## Considerações
<a name="Oracle.RealTimeSPM.Considerations"></a>

Considere o seguinte ao usar o gerenciamento de planos SQL em tempo real:
+ Usuários com a função DBA podem chamar `DBMS_SPM.CONFIGURE` diretamente. Essa etapa não requer um wrapper.
+ Os procedimentos `rdsadmin.rdsadmin_spm_util` são necessários para configurar os parâmetros da tarefa `SYS_AUTO_SPM_EVOLVE_TASK` pertencente ao SYS, porque o usuário mestre não tem acesso direto às tarefas do Advisor pertencentes ao SYS.
+ O gerenciamento de planos SQL em tempo real opera de forma transparente. Não é necessário alterar o código da aplicação.
+ As linhas de base de planos SQL consomem espaço no tablespace SYSAUX. Monitore o uso do SYSAUX depois de habilitar o recurso.
+ Os valores dos parâmetros passados para `DBMS_SPM.CONFIGURE` (como `'AUTO'` e `'OFF'`) diferenciam maiúsculas de minúsculas. Use valores em letras maiúsculas.

## Recursos relacionados
<a name="Oracle.RealTimeSPM.Resources"></a>
+ [DBMS\_SPM](https://docs.oracle.com/en/database/oracle/oracle-database/26/arpls/DBMS_SPM.html) na documentação do Oracle
+ [Managing SQL plan baselines](https://docs.oracle.com/en/database/oracle/oracle-database/26/tgsql/managing-sql-plan-baselines.html) na documentação do Oracle Database