

# RDS for Oracle でのリアルタイム SQL 計画管理
<a name="Oracle.RealTimeSPM"></a>

Oracle Database 26ai (26.0.0.0) 以降、Amazon RDS for Oracle はリアルタイム SQL 計画管理をサポートしています。この機能は、実行計画の変更を検出し、以前の計画と照らし合わせて評価し、必要に応じて SQL 計画ベースラインから最もパフォーマンスの高い計画を選択することで、SQL パフォーマンスのリグレッションを防ぎます。このプロセスは透過的であり、手動による介入は必要ありません。

RDS for Oracle でリアルタイム SQL 計画管理を有効にするには、`DBMS_SPM.CONFIGURE` を使用して自動進化タスクを有効にします。次に、`rdsadmin.rdsadmin_spm_util` パッケージを使用して SYS 所有のタスクパラメータを設定します。

**Topics**
+ [概要](#Oracle.RealTimeSPM.Overview)
+ [要件](#Oracle.RealTimeSPM.Requirements)
+ [リアルタイム SQL 計画管理](#Oracle.RealTimeSPM.Enabling)
+ [設定の確認](#Oracle.RealTimeSPM.Verifying)
+ [リアルタイム SQL 計画管理の無効化](#Oracle.RealTimeSPM.Disabling)
+ [rdsadmin\_spm\_util プロシージャ](#Oracle.RealTimeSPM.Procedures)
+ [SQL 計画ベースラインのモニタリング](#Oracle.RealTimeSPM.Monitoring)
+ [考慮事項](#Oracle.RealTimeSPM.Considerations)
+ [関連リソース](#Oracle.RealTimeSPM.Resources)

## 概要
<a name="Oracle.RealTimeSPM.Overview"></a>

SQL パフォーマンスのリグレッションは、Oracle オプティマイザが以前の計画よりもパフォーマンスが低い新しい実行計画を選択した場合に発生します。リアルタイム SQL 計画管理は、これらのリグレッションの検出と防止を自動化します。

リアルタイム SQL 計画管理が有効になっている場合、データベースは以下を実行します。

1. 実行計画の変更をリアルタイムで検出します。

1. 新しい計画のパフォーマンスを以前の計画と照らし合わせて評価します。

1. SQL 計画ベースラインを自動的に作成または更新します。

1. リグレッションを防ぐために、最もパフォーマンスの高い計画を選択します。

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

リアルタイム SQL 計画管理を使用するには、DB インスタンスが次の要件を満たしている必要があります。
+ Oracle Database 26ai 以降
+ Oracle Enterprise Edition

## リアルタイム SQL 計画管理
<a name="Oracle.RealTimeSPM.Enabling"></a>

リアルタイム SQL 計画管理を有効にするには、次の 2 つのステップを実行します。

### ステップ 1: 自動 SPM 進化タスクを有効にする
<a name="Oracle.RealTimeSPM.Enabling.Step1"></a>

マスターユーザーとして、または DBA ロールを持つユーザーとして、次のステートメントを実行します。

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

### ステップ 2: SYS 所有のタスクパラメータを設定する
<a name="Oracle.RealTimeSPM.Enabling.Step2"></a>

`SYS_AUTO_SPM_EVOLVE_TASK` タスクは SYS によって所有されます。RDS for Oracle は、この目的で `rdsadmin.rdsadmin_spm_util` パッケージを提供します。

データベースが進化したプランを自動的に受け入れるように `ACCEPT_PLANS` を `TRUE` に設定します。

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

(オプション) 代替計画ソースを `AUTO` に設定します。

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

## 設定の確認
<a name="Oracle.RealTimeSPM.Verifying"></a>

リアルタイム SQL 計画管理が有効になっていることを確認するには、次のクエリを実行します。

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

このクエリは `AUTO` を返します。

タスクパラメータの設定を確認するには、次のクエリを実行します。

```
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');
```

## リアルタイム SQL 計画管理の無効化
<a name="Oracle.RealTimeSPM.Disabling"></a>

リアルタイム SQL 計画管理を無効にするには、次のステートメントを実行します。

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

## rdsadmin\_spm\_util プロシージャ
<a name="Oracle.RealTimeSPM.Procedures"></a>

`rdsadmin.rdsadmin_spm_util` パッケージには、次のプロシージャが用意されています。


**rdsadmin\_spm\_util プロシージャ**  

| 手順 | パラメータ  | デフォルト | 説明 | 
| --- | --- | --- | --- | 
| `set_evolve_task_accept_plans` | `p_value` | `'TRUE'` | `SYS_AUTO_SPM_EVOLVE_TASK` の `ACCEPT_PLANS` パラメータを設定します。有効な値は、`'TRUE'` および `'FALSE'` です。 | 
| `set_evolve_task_alternate_plan_source` | `p_value` | `'AUTO'` | `SYS_AUTO_SPM_EVOLVE_TASK` の `ALTERNATE_PLAN_SOURCE` パラメータを設定します。有効な値は、`'AUTO'`、`'CURSOR_CACHE'`、`'AUTOMATIC_WORKLOAD_REPOSITORY'`、および `'SQL_TUNING_SET'` です。 | 

## SQL 計画ベースラインのモニタリング
<a name="Oracle.RealTimeSPM.Monitoring"></a>

リアルタイム SQL 計画管理を有効にすると、データベースが自動的に管理する計画ベースラインをモニタリングできます。

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

## 考慮事項
<a name="Oracle.RealTimeSPM.Considerations"></a>

リアルタイム SQL 計画管理を使用する場合は、次の点を考慮してください。
+ DBA ロールを持つユーザーは、`DBMS_SPM.CONFIGURE` を直接呼び出すことができます。このステップでは、ラッパーは必要ありません。
+ マスターユーザーは SYS 所有のアドバイザータスクに直接アクセスできないため、`rdsadmin.rdsadmin_spm_util` の手順は SYS 所有の `SYS_AUTO_SPM_EVOLVE_TASK` タスクでタスクパラメータを設定するために必要です。
+ リアルタイム SQL 計画管理は透過的に動作します。アプリケーションコードを変更する必要はありません。
+ SQL 計画ベースラインは、SYSAUX テーブルスペースのスペースを消費します。この機能を有効すると、SYSAUX の使用状況がモニタリングされます。
+ `DBMS_SPM.CONFIGURE` に渡されるパラメータ値 (`'AUTO'` や `'OFF'` など) では、大文字と小文字が区別されます。大文字の値を使用します。

## 関連リソース
<a name="Oracle.RealTimeSPM.Resources"></a>
+ [DBMS\_SPM](https://docs.oracle.com/en/database/oracle/oracle-database/26/arpls/DBMS_SPM.html) (Oracle Database ドキュメント)
+ [SQL 計画ベースラインの管理](https://docs.oracle.com/en/database/oracle/oracle-database/26/tgsql/managing-sql-plan-baselines.html) (Oracle Database ドキュメント)