RDS for Oracle でのリアルタイム SQL 計画管理
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 所有のタスクパラメータを設定します。
トピック
概要
SQL パフォーマンスのリグレッションは、Oracle オプティマイザが以前の計画よりもパフォーマンスが低い新しい実行計画を選択した場合に発生します。リアルタイム SQL 計画管理は、これらのリグレッションの検出と防止を自動化します。
リアルタイム SQL 計画管理が有効になっている場合、データベースは以下を実行します。
-
実行計画の変更をリアルタイムで検出します。
-
新しい計画のパフォーマンスを以前の計画と照らし合わせて評価します。
-
SQL 計画ベースラインを自動的に作成または更新します。
-
リグレッションを防ぐために、最もパフォーマンスの高い計画を選択します。
要件
リアルタイム SQL 計画管理を使用するには、DB インスタンスが次の要件を満たしている必要があります。
-
Oracle Database 26ai 以降
-
Oracle Enterprise Edition
リアルタイム SQL 計画管理
リアルタイム SQL 計画管理を有効にするには、次の 2 つのステップを実行します。
ステップ 1: 自動 SPM 進化タスクを有効にする
マスターユーザーとして、または DBA ロールを持つユーザーとして、次のステートメントを実行します。
BEGIN DBMS_SPM.CONFIGURE('AUTO_SPM_EVOLVE_TASK', 'AUTO'); END; /
ステップ 2: SYS 所有のタスクパラメータを設定する
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');
設定の確認
リアルタイム 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 計画管理の無効化
リアルタイム SQL 計画管理を無効にするには、次のステートメントを実行します。
BEGIN DBMS_SPM.CONFIGURE('AUTO_SPM_EVOLVE_TASK', 'OFF'); END; /
rdsadmin_spm_util プロシージャ
rdsadmin.rdsadmin_spm_util パッケージには、次のプロシージャが用意されています。
| 手順 | パラメータ | デフォルト | 説明 |
|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
SQL 計画ベースラインのモニタリング
リアルタイム SQL 計画管理を有効にすると、データベースが自動的に管理する計画ベースラインをモニタリングできます。
SELECT SQL_HANDLE, PLAN_NAME, ENABLED, ACCEPTED, AUTOPURGE FROM DBA_SQL_PLAN_BASELINES ORDER BY LAST_MODIFIED DESC;
考慮事項
リアルタイム 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'など) では、大文字と小文字が区別されます。大文字の値を使用します。
関連リソース
-
DBMS_SPM
(Oracle Database ドキュメント) -
SQL 計画ベースラインの管理
(Oracle Database ドキュメント)