174 DBMS_SPM
DBMS_SPM
パッケージは、様々なSQL文に対して保持される、計画履歴およびSQL計画のベースラインに対する制御された操作を実行するためのインタフェースを、DBAおよびその他のユーザーに提供することによって、SQL計画管理機能をサポートします。
この章のトピックは、次のとおりです:
参照:
詳細は、『Oracle Database SQLチューニング・ガイド』のSQL計画管理の使用方法に関する項を参照してください。
174.1 DBMS_SPMの概要
DBMS_SPM
パッケージを使用すると、ユーザーはSQL計画管理を使用して、SQL実行計画を管理できます。
SQL計画管理は、長期間にわたってSQL文の実行計画を記録し評価することで、SQL文の実行計画の突然の変更によってパフォーマンスが低下するのを防止し、効果的であることが判明している既存の計画セットで構成されるSQL計画ベースラインを作成します。次にSQL計画ベースラインを使用して、システムで発生する変更とは無関係に、対応するSQL文のパフォーマンスを保持します。SQL計画管理がSQLのパフォーマンスを向上または保持する一般的な使用のシナリオには次のようなものがあります。
-
新しいオプティマイザ・バージョンをインストールするデータベース・アップグレードでは、通常、SQL文に対して若干の計画変更がありますが、ほとんどの計画変更ではパフォーマンスは変化しません。ただし、ある一部の計画変更では、パフォーマンスが低下する場合があります。SQL計画ベースラインを使用すると、データベースのアップグレードが原因でパフォーマンスの低下が発生する可能性は大幅に減少します。
-
継続的なシステムおよびデータの変更は一部のSQL文の計画に影響を与え、パフォーマンスの低下の原因になる場合があります。SQL計画ベースラインを使用すると、パフォーマンスの低下が最小限に抑えられ、SQLのパフォーマンスが安定します。
-
新しいアプリケーション・モジュールをデプロイメントすることは、システムに新しいSQL文を導入することを意味します。アプリケーション・ソフトウェアは、新しいSQL文の標準テスト構成で開発された適切なSQL実行計画を使用できます。システムの本番構成がテスト構成と大幅に異なる場合は、パフォーマンスを向上するために時間をかけてSQL計画ベースラインを進化させることができます。
174.2 DBMS_SPMのセキュリティ・モデル
このパッケージの所有者はSYS
です。パッケージのプロシージャを実行するには、EXECUTE
パッケージ権限が必要です。ADMINISTER
SQL
MANAGEMENT
OBJECT
権限を付与されているすべてのユーザーがDBMS_SPM
パッケージを実行できます。
174.3 DBMS_SPMの定数
DBMS_SPM
パッケージは、パラメータ値の指定に使用できる定数を提供します。
これらを、次の表に示します。これらの定数は、EVOLVE_SQL_PLAN_BASELINEファンクションのtime_limit
パラメータの標準入力として定義されます。
表174-1 DBMS_SPMの定数
定数 | タイプ | 値 | 説明 |
---|---|---|---|
|
|
|
EVOLVE_SQL_PLAN_BASELINEファンクションにより費やされる適切な時間が判断されます。 |
|
|
|
EVOLVE_SQL_PLAN_BASELINEファンクションにより費やされる時間に制限はありません。 |
174.6 DBMS_SPMサブプログラムの要約
この表では、DBMS_SPM
パッケージのサブプログラムをリストし、簡単に説明します。
表174-2 DBMS_SPMパッケージのサブプログラム
サブプログラム | 説明 |
---|---|
進化タスクのリコメンデーションに基づいて計画を受け入れます。 |
|
ADD_VERIFIED_SQL_PLAN_BASELINEファンクション |
各種ソース(カーソル・キャッシュ、自動SQLチューニング・セット、自動ワークロード・リポジトリなど)から指定のSQL_IDに使用可能な計画を見つけます。 |
属性名/値の形式でSQL文と関連付けられている1つまたはすべての計画の属性を変更します。 |
|
現在実行中の進化タスクを取り消します。 |
|
パラメータ/値の形式でSQL管理ベースの構成オプションを設定します。 |
|
アドバイザのタスクを作成し、そのパラメータを設定します。 |
|
システム間でのSQL計画ベースラインの転送に使用するステージング表を作成します。 |
|
進化したタスクを削除します。 |
|
SQL文に関連付けられている1つまたはすべての計画を削除します。 |
|
1つ以上のSQL文に関連付けられているSQL計画ベースラインを進化させます。 |
|
以前に作成した進化タスクを実行します。 |
|
進化タスクのリコメンデーションに基づいて計画を実装します。 |
|
現在実行中の進化タスクを中断します。 |
|
SQL文のカーソル・キャッシュに存在する1つ以上の計画をロードします。 |
|
AWRからの計画を使用して一連のSQL文にSQL計画ベースラインを含むSQL管理ベース(SMB)をロードし、ロードした計画の数を戻します。 |
|
SQLチューニング・セット(STS)に保存されている計画をSQL計画ベースラインにロードします。 |
|
既存のストアド・アウトラインをSQL計画ベースラインに移行します。 |
|
SQL管理ベースからステージング表にSQL計画ベースラインをパック(エクスポート)します。 |
|
進化タスクを初期状態にリセットします。 |
|
以前に中断したタスクを再開します。 |
|
自動進化タスクの実行結果を表示します。 |
|
進化したタスクの結果を表示します。 |
|
進化タスクのパラメータを設定します。 |
|
ステージング表からSQL管理ベースにSQL計画ベースラインをアンパック(インポート)します。 |
174.6.1 ACCEPT_SQL_PLAN_BASELINEプロシージャ
このプロシージャは、進化タスクのリコメンデーションに基づいて計画を受け入れます。
構文
DBMS_SPM.ACCEPT_SQL_PLAN_BASELINE ( task_name IN VARCHAR2, object_id IN NUMBER := NULL, task_owner IN VARCHAR2 := NULL, force IN BOOLEAN := FALSE);
パラメータ
表174-3 ACCEPT_SQL_PLAN_BASELINEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
実装するタスクの識別子。 |
|
単一の計画を表すアドバイザ・フレームワーク・オブジェクトの識別子。 |
|
進化タスクの所有者。デフォルトは、現行のスキーマ所有者です。 |
|
アドバイザがそのようなアクションを推奨しなかった場合でも計画を受け入れます。デフォルトは |
174.6.2 ADD_VERIFIED_SQL_PLAN_BASELINEファンクション
このファンクションは、各種ソース(カーソル・キャッシュ、自動SQLチューニング・セット、自動ワークロード・リポジトリなど)から指定のSQL_IDに使用可能な計画を見つけます。
構文
DBMS_SPM.ADD_VERIFIED_SQL_PLAN_BASELINE (
sql_id IN VARCHAR2
);
パラメータ
表174-4 ADD_VERIFIED_SQL_PLAN_BASELINEファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
SQL文識別子。カーソル・キャッシュなどの各種ソースにある計画を識別するために使用されます。 |
戻り値
検証済、再現済および承認済のSQL計画ベースラインのレポートが含まれているCLOB。
使用上のノート
SQL計画ベースラインは、選択したSQL文に対して最もよく知られた計画が使用されるように作成されます。このファンクションの実行ステップは次のとおりです:
- カーソル・キャッシュ、自動ワークロード・リポジトリおよび自動SQLチューニング・セット(
SYS_AUTO_STS
)から、SQL計画管理のSQL計画履歴に承認済以外の状態の計画をロードします。 - 「SQL計画管理展開アドバイザ」を内部的に使用して、パフォーマンスが最高になる実行計画を特定します。パフォーマンスが最高になる計画が承認されます。
このファンクションの完了時に、カーソル・キャッシュ、AWRおよび自動SQLチューニング・セットから使用可能な計画の中で最適な計画が承認されます。
ノート:
「Administer SQL Management Object」権限が必要です。例
36k32wnz0v0fd
のSQL文が、計画ハッシュ値が923079310
のカーソル・キャッシュにあります(この計画は索引一意スキャンです)。select sql_id, plan_hash_value, sql_text
from v$sql
where sql_text like 'select /* SPM_TEST_QUERY%'
/
SQL_ID PLAN_HASH_VALUE SQL_TEXT
--------------- --------------- --------------------------------------------------------------------
36k32wnz0v0fd 923079310 select /* SPM_TEST_QUERY */ num from example_spm_table where id = 100
923079310
)と全表スキャン(2448381833
)を取得しています。select sql_text, sqlset_name, plan_hash_value
from dba_sqlset_statements
where sql_text like 'select /* SPM_TEST_QUERY%';
SQL_TEXT SQLSET_NAME PLAN_HASH_VALUE
----------------------------------------------------------------------- ------------- ---------------
select /* SPM_TEST_QUERY */ num from example_spm_table where id = 100 SYS_AUTO_STS 923079310
select /* SPM_TEST_QUERY */ num from example_spm_table where id = 100 SYS_AUTO_STS 2448381833
set tab off
set serveroutput on
set pagesize 100
set linesize 250
set long 100000
column report format a200
var rep clob;
BEGIN
:rep := DBMS_SPM. ADD_VERIFIED_SQL_PLAN_BASELINE('36k32wnz0v0fd');
END;
/
select :rep report from dual;
SQL Plan Baselines verified for SQL ID: 36k32wnz0v0fd
------------------------------------------------------------------------------------------
Plan Hash Value Plan Name Reproduced Accepted Source
--------------- ------------------------------ ---------- -------- --------------
923079310 SQL_PLAN_163tr5qgzwmgt05ce4c2e YES YES CURSOR CACHE
2448381833 SQL_PLAN_163tr5qgzwmgt1f191f3e YES NO SQL TUNING SET
-----------------------------------------------------------------------------------------
SQL Handle : SQL_130f372d9ffe4df9
SQL Text : select /* SPM_TEST_QUERY */ num from example_spm_table where id = 100
-----------------------------------------------------------------------------------------
select sql_text, accepted, enabled, sql_handle, plan_name
from dba_sql_plan_baselines
where sql_text like 'select /* SPM_TEST_QUERY%';
SQL_TEXT ACC ENA SQL_HANDLE PLAN_NAME
---------------------------------------------------------------------- --- --- -------------------- ------------------------------
select /* SPM_TEST_QUERY */ num from example_spm_table where id = 100 YES YES SQL_130f372d9ffe4df9 SQL_PLAN_163tr5qgzwmgt05ce4c2e
select /* SPM_TEST_QUERY */ num from example_spm_table where id = 100 NO YES SQL_130f372d9ffe4df9 SQL_PLAN_163tr5qgzwmgt1f191f3e
select * from table(dbms_xplan.display_sql_plan_baseline('SQL_130f372d9ffe4df9'));
--------------------------------------------------------------------------------
SQL handle: SQL_130f372d9ffe4df9
SQL text: select /* SPM_TEST_QUERY */ num from example_spm_table where id = 100
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
Plan name: SQL_PLAN_163tr5qgzwmgt05ce4c2e Plan id: 923079310
Enabled: YES Fixed: NO Accepted: YES Origin: EVOLVE-LOAD-FROM-CURSOR-CACHE
Plan rows: From Auto SQL Tuning Set
--------------------------------------------------------------------------------
Plan hash value: 923079310
-------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | 2 (100)| |
| 1 | TABLE ACCESS BY INDEX ROWID| EXAMPLE_SPM_TABLE | 1 | 8 | 2 (0)| 00:00:01 |
|* 2 | INDEX UNIQUE SCAN | SPM_TAB_PK | 1 | | 1 (0)| 00:00:01 |
-------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("ID"=100)
--------------------------------------------------------------------------------
Plan name: SQL_PLAN_163tr5qgzwmgt1f191f3e Plan id: 2448381833
Enabled: YES Fixed: NO Accepted: NO Origin: EVOLVE-LOAD-FROM-STS
Plan rows: From Auto SQL Tuning Set
--------------------------------------------------------------------------------
Plan hash value: 2448381833
---------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | 3 (100)| |
|* 1 | TABLE ACCESS FULL| EXAMPLE_SPM_TABLE | 1 | 8 | 3 (0)| 00:00:01 |
---------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("ID"=100)
174.6.3 ALTER_SQL_PLAN_BASELINEファンクション
このファンクションは、属性名/値の形式でSQL文と関連付けられている1つまたはすべての計画の属性を変更します。
構文
DBMS_SPM.ALTER_SQL_PLAN_BASELINE ( sql_handle IN VARCHAR2 := NULL, plan_name IN VARCHAR2 := NULL, attribute_name IN VARCHAR2, attribute_value IN VARCHAR2) RETURN PLS_INTEGER;
パラメータ
表174-5 ALTER_SQL_PLAN_BASELINEファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
SQL文のハンドル。属性変更のためにSQL文に関連付けられている計画を識別します。 |
|
特定の計画の名前。デフォルトの |
|
設定する計画属性の名前(次の表を参照)。 |
|
設定する計画属性の値(次の表を参照)。 |
表174-6 ALTER_SQL_PLAN_BASELINEファンクションのパラメータの名前および値
名前 | 説明 | 設定可能な値 |
---|---|---|
|
' |
' |
|
' |
' |
|
' |
' |
|
計画の名前。 |
最大30文字の文字列 |
|
計画の説明。 |
最大500バイトの文字列 |
戻り値
変更した計画の数。
使用上のノート
1つの計画を指定した場合は、様々なステータスの1つ、計画名または説明を変更できます。SQL文のすべての計画を指定した場合は、様々なステータスの1つまたは説明を変更できます。このファンクションは、同じ計画または他の計画で別の計画属性を設定するたびに何回もコールできます。
174.6.4 CANCEL_EVOLVE_TASKプロシージャ
このプロシージャは、現在実行中の進化タスクを取り消します。タスクから、すべての中間結果が削除されます。
構文
DBMS_SPM.CANCEL_EVOLVE_TASK ( task_name IN VARCHAR2);
パラメータ
表174-7 CANCEL_EVOLVE_TASKプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
取り消すタスクの識別子。 |
174.6.5 CONFIGUREプロシージャ
このプロシージャは、SQL管理ベース用およびSQL計画ベースラインのメンテナンス用の構成オプションを設定します。このファンクションを複数回呼び出し、毎回異なる構成オプションを設定できます。
構文
DBMS_SPM.CONFIGURE (
parameter_name IN VARCHAR2,
parameter_value IN VARCHAR2 := NULL,
allow IN BOOLEAN := TRUE);
パラメータ
表174-8 CONFIGUREプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
設定するパラメータの名前(次の表を参照)。 |
|
設定するパラメータの値(次の表を参照)。 |
|
|
表174-9 CONFIGUREプロシージャのパラメータの名前および値
パラメータ名 | 説明 | 設定可能な値 |
---|---|---|
|
( |
アクション名: |
|
( データベースでこのフィルタが使用されるのは、 |
モジュール名( |
|
( データベースでこのフィルタが使用されるのは、 |
スキーマ名、 |
|
( データベースでこのフィルタが使用されるのは、 |
SQL文のテキスト、 |
|
高頻度SPM展開アドバイザのタスクを有効または無効にする設定。高頻度タスクは1時間ごとに実行され、30分以内で実行されます。これらの設定は構成可能ではありません。頻繁に実行されるということは、オプティマイザがよりよい実行計画を見つけて展開する機会が増えることを意味します。 デフォルト値は 値 値 値 ノート: 『Oracle Database SQLチューニング・ガイド』の「自動SQL計画管理について」を参照してください。ここでは、高頻度SPM展開タスク、およびリアルタイムの自動SQL計画管理とバックグラウンドで検証される自動SQL計画管理の違いについて説明しています。 |
|
|
データベースによってパージされるまで未使用の計画を保持する週の数。 NULL値の場合、デフォルト値の53週または1年プラス1週にリセットされます。(これにより、毎年実行する問合せの計画を保持します。) |
5–523 (デフォルトは53) |
|
SQL管理ベースに使用可能な この値を超えると、アラートが発行されます。NULL値の場合、割合がデフォルト値の10%にリセットされます。 |
1–50 (デフォルトは10) |
例外
表174-10 CONFIGUREの例外
エラー番号 | 説明 |
---|---|
ORA-38133 |
パラメータ名が無効です |
ORA-38134 |
パラメータ値が無効です |
ORA-38150 |
新しいフィルタに十分な領域がありません |
ORA-38151 |
モジュール名が長すぎます |
ORA-38152 |
アクション名が長すぎます |
ORA-38304 |
ユーザー名が指定されていないか、または無効です |
使用上のノート
-
parameter_name
がauto_capture_sql_text
である場合、parameter_value
は自動検索フィルタです。このフィルタは、allow=>true
であるときにLIKE
parameter_name
の検索パターンを使用します。このフィルタは、allow=>false
であるときにNOT LIKE
parameter_name
の検索パターンを使用します。その他、NULL以外のすべての
parameter_name
の値の場合、検索パターンはallow
の設定に依存します。このパラメータは、allow=>true
であるときに等号(=
)を使用します。このパラメータは、allow=>false
であるときに不等号(<>
)を使用します。 -
タイプが異なる自動取得パラメータを複数構成できます。同じパラメータに対して複数の値を指定することはできません。代わりに、特定のパラメータに対して指定した値が結合されます。たとえば、
auto_capture_sql_text
に'%TABLE1%
'、TRUE
および'%TABLE2%
'を指定すると、FALSE
はSQLテキストLIKE '%TABLE1%'
およびNOT LIKE '%TABLE2%'
になります。データベースでこれらの構成設定が使用されるのは、初期化パラメータOPTIMIZER_CAPTURE_SQL_PLAN_BASELINES
がTRUE
に設定されている場合のみです。 -
parameter_value
にNULL値を指定すると、parameter_name
のフィルタが完全に削除されます。allow=FALSE
と組み合せてparamter_value=>'%'
を使用することで、パラメータのすべての値をフィルタ処理で除外し、個別のフィルタを作成して指定された値のみを含めることができます。DBA_SQL_MANAGEMENT_CONFIG
ビューには、現在のフィルタが示されます。 -
SQL管理ベースのデフォルトの領域配分は、
SYSAUX
表領域のサイズの10パーセントのみです。領域配分は、最大50%に設定できます。未使用の計画のデフォルトの保存期間は1年と1週間で、すなわち計画は、1年を超えて未使用の場合に、自動的にパージされます。保存期間は、最大523週間(すなわち10年強)に設定できます。 -
SQL管理ベースによって占有される領域が、定義されている領域配分の制限を超えると、週次データベース・アラートが生成されます。
例
次の例では、SELECT a%
のようなSQLテキスト用のフィルタを作成します。
EXEC DBMS_SPM.CONFIGURE('AUTO_CAPTURE_SQL_TEXT', 'select a%', 'TRUE');
次の例では、HR
解析スキーマを除外します。
EXEC DBMS_SPM.CONFIGURE('AUTO_CAPTURE_PARSING_SCHEMA_NAME', 'HR', 'FALSE');
次の例では、SQLテキスト用の既存のフィルタを削除します。
EXEC DBMS_SPM.CONFIGURE('AUTO_CAPTURE_SQL_TEXT', NULL, NULL);
次の例では、SQLテキストselect a%
に対するLIKE
またはNOT LIKE
フィルタを削除します。
EXEC DBMS_SPM.CONFIGURE('AUTO_CAPTURE_SQL_TEXT', 'select a%', NULL);
次の例では、述語(action LIKE 'R%') OR (action LIKE '%E_')
を使用してフィルタを作成します。
EXEC DBMS_SPM.CONFIGURE('AUTO_CAPTURE_ACTION', 'R%', 'TRUE');
EXEC DBMS_SPM.CONFIGURE('AUTO_CAPTURE_ACTION', '%E_', 'TRUE');
次の例では、述語NOT(module LIKE 'LOGGER') AND NOT(module LIKE 'UTIL__')
を使用してフィルタを作成します。
EXEC DBMS_SPM.CONFIGURE('AUTO_CAPTURE_MODULE', 'LOGGER', 'FALSE');
EXEC DBMS_SPM.CONFIGURE('AUTO_CAPTURE_MODULE', 'UTIL__', 'FALSE');
174.6.6 CREATE_EVOLVE_TASKファンクション
このファンクションには2つのオーバーロードがあり、その両方ともでアドバイザのタスクが作成され、パラメータが設定されます。SQLハンドルを取るこのバージョンは、特定のSQL文の1つ以上の計画を進化させる進化タスクを作成します。
構文
DBMS_SPM.CREATE_EVOLVE_TASK ( sql_handle IN VARCHAR2 := NULL, plan_name IN VARCHAR2 := NULL, time_limit IN NUMBER := DBMS_SPM.AUTO_LIMIT, task_name IN VARCHAR2 := NULL, description IN VARCHAR2 := NULL) RETURN VARCHAR2; DBMS_SPM.CREATE_EVOLVE_TASK ( plan_list IN DBMS_SPM.NAME_LIST, time_limit IN NUMBER := DBMS_SPM.AUTO_LIMIT, task_name IN VARCHAR2 := NULL, description IN VARCHAR2 := NULL) RETURN VARCHAR2;
パラメータ
表174-11 CREATE_EVOLVE_TASKファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
SQL文のハンドル。デフォルトの |
|
計画名のリスト。計画は、異なるSQL文に属している場合があります。 |
|
計画の識別子。デフォルトの |
|
時間制限(分)。時間制限はグローバルで、次の方法で使用されます。最初の未承認の計画の時間制限は、入力値と同じです。2番目の未承認の計画の時間制限は、入力値から最初の計画の検証で費やした時間を差し引いた値になります。それ以降の時間制限も、同様の方法で計算します。デフォルトの |
|
進化タスク名 |
|
タスクの説明(最大256文字)。 |
戻り値
SQL進化タスクの一意の名前。
174.6.7 CREATE_STGTAB_BASELINEプロシージャ
このプロシージャは、システム間でのSQL計画ベースラインの転送に使用するステージング表を作成します。
構文
DBMS_SPM.CREATE_STGTAB_BASELINE (
table_name IN VARCHAR2,
table_owner IN VARCHAR2 := NULL,
tablespace_name IN VARCHAR2 := NULL);
パラメータ
表174-12 CREATE_STGTAB_BASELINEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
SQL計画ベースラインをパックおよびアンパックする目的で作成するステージング表の名前。 |
|
ステージング表の所有者の名前。デフォルトの |
|
表領域名。デフォルトの |
使用上のノート
ステージング表の作成が最初のステップです。システム間でSQL計画ベースラインを移行するには、ユーザーまたはDBAは次の一連のステップを実行する必要があります。
-
ソース・システムにステージング表を作成します。
-
ソース・システムでSQL計画ベースラインを選択して、ステージング表にパックします。
-
ソース・システムからターゲット・システムにステージング表をコピーします。たとえば、Oracle Data Pumpを使用してステージング表をエクスポートおよびインポートできます。
-
ステージング表からSQL計画ベースラインを選択して、ターゲット・システムにアンパックします。
174.6.8 DROP_EVOLVE_TASKプロシージャ
このプロシージャは、進化したタスクを削除します。
構文
DBMS_SPM.DROP_EVOLVE_TASK (
task_name IN VARCHAR2);
パラメータ
表174-13 DROP_EVOLVE_TASKプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
削除するタスクの識別子 |
174.6.9 DROP_SQL_PLAN_BASELINEファンクション
このファンクションは、SQL文に関連付けられている1つまたはすべての計画を削除します。
構文
DBMS_SPM.DROP_SQL_PLAN_BASELINE ( sql_handle IN VARCHAR2 := NULL, plan_name IN VARCHAR2 := NULL) RETURN PLS_INTEGER;
パラメータ
表174-14 DROP_SQL_PLAN_BASELINEファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
SQL文のハンドル。削除するSQL文に関連付けられている計画を識別します。 |
|
計画名。特定の計画を識別します。デフォルトの |
戻り値
削除した計画の数。
174.6.10 EVOLVE_SQL_PLAN_BASELINEファンクション
このファンクションは、1つ以上のSQL文に関連付けられているSQL計画ベースラインを進化させます。SQL計画ベースラインは、1つ以上の承認されていない計画が承認済に変更されると進化します。
ユーザーによって問合せ(パラメータverify
= 'YES
')が行われた場合、関連付けられているSQL計画ベースラインから選択された計画のパフォーマンスと各未承認の計画の実行パフォーマンスが比較されます。未承認の計画のパフォーマンスがSQL計画ベースラインのパフォーマンスより優れている場合、未承認の計画は承認済の計画に変更されます(ただし、ユーザーがこのようなアクションを許可している場合(パラメータcommit
= 'YES')にかぎられます)。
このファンクションの2番目の形式では、計画リスト形式を使用します。
構文
DBMS_SPM.EVOLVE_SQL_PLAN_BASELINE ( sql_handle IN VARCHAR2 := NULL, plan_name IN VARCHAR2 := NULL, time_limit IN INTEGER := DBMS_SPM.AUTO_LIMIT, verify IN VARCHAR2 := 'YES', commit IN VARCHAR2 := 'YES') RETURN CLOB; DBMS_SPM.EVOLVE_SQL_PLAN_BASELINE ( plan_list IN DBMS_SPM.NAME_LIST, time_limit IN INTEGER := DBMS_SPM.AUTO_LIMIT, verify IN VARCHAR2 := 'YES', commit IN VARCHAR2 := 'YES') RETURN CLOB;
パラメータ
表174-15 EVOLVE_SQL_PLAN_BASELINEファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
SQL文の識別子。 |
|
計画の識別子。デフォルトの |
|
計画名のリスト。リストないの各計画は、同じSQL文に属するものでも、別のSQL文に属するものでもかまいません。 |
|
時間制限(分)。これは
|
|
未承認の計画を承認済の計画に変更する前に、計画を実行し、パフォーマンスを比較するかどうかを指定します。パフォーマンスの検証では、未承認の計画および対応するSQL計画ベースラインから選択された計画が実行され、これらの計画のパフォーマンス統計が比較されます。未承認の計画でパフォーマンスが向上した場合、未承認の計画は承認済の計画に変更されます。
|
|
未承認の計画の
|
戻り値
書式設定されたテキスト・レポートが含まれているCLOB
。レポートには、ACCEPTED
ステータスへの変更が可能な未承認の計画が順に示されます。また、verify = 'YES
'の場合は、それらの計画のパフォーマンスの検証結果も示されます。
使用上のノート
このサブプログラムを起動するには、ADMINISTER
SQL
MANAGEMENT
OBJECT
権限が必要です。
174.6.11 EXECUTE_EVOLVE_TASKファンクション
このファンクションは、以前に作成した進化タスクを実行します。
構文
DBMS_SPM.EXECUTE_EVOLVE_TASK ( task_name IN VARCHAR2, execution_name IN VARCHAR2 := NULL, execution_desc IN VARCHAR2 := NULL); RETURN VARCHAR2;
パラメータ
表174-16 EXECUTE_EVOLVE_TASKファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
進化タスク名 |
|
実行を修飾して識別するための名前。指定されていない場合は、アドバイザによって生成され、ファンクションによって戻されます。 |
|
実行の説明(最大256文字)。 |
戻り値
新しい実行の名前。
174.6.12 IMPLEMENT_EVOLVE_TASKファンクション
このファンクションは、進化タスクによって推奨されているすべてのアクションを実装します。
構文
DBMS_SPM.IMPLEMENT_EVOLVE_TASK ( task_name IN VARCHAR2, task_owner IN VARCHAR2 := NULL, execution_name IN VARCHAR2 := NULL, force IN BOOLEAN := FALSE) RETURN NUMBER;
パラメータ
表174-17 IMPLEMENT_EVOLVE_TASKファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
レポートするタスクの識別子。 |
|
進化タスクの所有者。デフォルトは、現行のスキーマ所有者です。 |
|
実行を修飾して識別するための名前。 |
|
アドバイザがそのようなアクションを推奨しなかった場合でもすべての計画を受け入れます。デフォルトは |
戻り値
受け入れた計画の数。
174.6.13 INTERRUPT_EVOLVE_TASKプロシージャ
このプロシージャは、現在実行中の進化タスクを中断します。このタスクは、通常の終了時と同様に操作を終了し、ユーザーは中間結果にアクセスできます。タスクは後で再開できます。
構文
DBMS_SPM.INTERRUPT_EVOLVE_TASK ( task_name IN VARCHAR2);
パラメータ
表174-18 INTERRUPT_EVOLVE_TASKプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
中断するタスクの識別子。 |
174.6.14 LOAD_PLANS_FROM_AWRファンクション
このファンクションは、AWRからの計画を使用して一連のSQL文のSQL計画ベースラインをSQL管理ベース(SMB)にロードし、ロードした計画の数を戻します。
構文
DBMS_SPM.LOAD_PLANS_FROM_AWR begin_snap IN NUMBER, end_snap IN NUMBER, basic_filter IN VARCHAR2 := NULL, fixed IN VARCHAR2 := 'NO', enabled IN VARCHAR2 := 'YES', commit_rows IN NUMBER := 1000) RETURN PLS_INTEGER;
パラメータ
表174-19 LOAD_PLANS_FROM_AWRファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
開始スナップショット |
|
終了スナップショット |
|
AWRからSQLをフィルタするためのSQL述語。
|
|
デフォルトは |
|
デフォルトは |
|
定期的なコミットを実行する前にロードするSQL計画の数。 |
|
インポート済またはPDBレベルのAWRデータに使用されるDBID。 |
使用上のノート
Administer SQL Management Object
権限が必要です。
参照:
SQLSET_ROW
オブジェクトの詳細は、SQLSET_ROWオブジェクト・タイプを参照してください。
174.6.15 LOAD_PLANS_FROM_CURSOR_CACHEファンクション
このファンクションは、1つまたは1組のSQL文のカーソル・キャッシュに存在する1つ以上の計画をロードします。これには、4つのオーバーロード(SQL文テキストを使用するもの、SQLハンドルを使用するもの、SQL IDを使用するもの、またはattribute_name
とattribute_value
のペアを使用するもの)があります。
構文
DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE ( sql_id IN VARCHAR2, plan_hash_value IN NUMBER := NULL, sql_text IN CLOB, fixed IN VARCHAR2 := 'NO', enabled IN VARCHAR2 := 'YES') RETURN PLS_INTEGER; DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE ( sql_id IN VARCHAR2, plan_hash_value IN NUMBER := NULL, sql_handle IN VARCHAR2, fixed IN VARCHAR2 := 'NO', enabled IN VARCHAR2 := 'YES') RETURN PLS_INTEGER; DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE ( sql_id IN VARCHAR2, plan_hash_value IN NUMBER := NULL, fixed IN VARCHAR2 := 'NO', enabled IN VARCHAR2 := 'YES') RETURN PLS_INTEGER; DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE ( attribute_name IN VARCHAR2, attribute_value IN VARCHAR2, fixed IN VARCHAR2 := 'NO', enabled IN VARCHAR2 := 'YES') RETURN PLS_INTEGER;
パラメータ
表174-20 LOAD_PLANS_FROM_CURSOR_CACHEファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
SQL文の識別子。カーソル・キャッシュ内のSQL文を識別します。ノート: 3番目のオーバーロードでは、識別されたSQL文のテキストがカーソル・キャッシュから抽出され、計画のロード先となるSQL計画ベースラインの特定にそのテキストが使用されます。SQL計画ベースラインが存在しない場合は作成されます。 |
|
計画の識別子。デフォルトの |
|
計画のロード先となるSQL計画ベースラインを特定する場合に使用されるSQLテキスト。SQL計画ベースラインが存在しない場合は作成されます。ユーザーがSQL文のテキストにヒントを追加してSQL文をチューニングし、その結果生成された計画を元のSQL文のSQL計画ベースラインにロードする場合は、テキストの使用が重要となります。 |
|
計画のロード先となるSQL計画ベースラインを特定する場合に使用されるSQLハンドル。 |
|
デフォルトの |
|
次の属性名のいずれかになります。
|
|
属性値は、属性名が' |
|
デフォルトの' |
戻り値
ロードした計画の数。
使用上のノート
このサブプログラムを起動するには、ADMINISTER
SQL
MANAGEMENT
OBJECT
権限が必要です。
174.6.16 LOAD_PLANS_FROM_SQLSETファンクション
このファンクションは、SQLチューニング・セット(STS)に保存されている計画をSQL計画ベースラインにロードします。STSからロードした計画は、パフォーマンスに関しては検証されませんが、承認済の計画として既存または新規のSQL計画ベースラインに追加されます。このファンクションを使用すると、新しいSQL計画ベースラインでSQL管理ベースをシードできます。
構文
DBMS_SPM.LOAD_PLANS_FROM_SQLSET ( sqlset_name IN VARCHAR2, sqlset_owner IN VARCHAR2 := NULL, basic_filter IN VARCHAR2 := NULL, fixed IN VARCHAR2 := 'NO', enabled IN VARCHAR2 := 'YES' commit_rows IN NUMBER := 1000) RETURN PLS_INTEGER;
パラメータ
表174-21 LOAD_PLANS_FROM_SQLSETファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
SQL計画ベースラインに計画をロードするSTSの名前。 |
|
STSの所有者。 |
|
条件を満たす計画のみをロード対象として選択するためにSTSに適用されるフィルタ。このフィルタは、 |
|
デフォルトの' |
|
デフォルトの' |
|
定期的なコミットを実行する前にロードするSQL計画の数。UNDOログのサイズ縮小に役立ちます。 |
戻り値
ロードした計画の数。
使用上のノート
-
リモート・システムから計画をロードするには、まずリモート・システムのSTSに計画をロードし、リモート・システムからローカル・システムにSTSをエクスポート/インポートしてから、このファンクションを使用します。
-
自動ワークロード・リポジトリ(AWR)から計画をロードするには、まずAWRスナップショットに保存されている計画をSTSにロードしてから、このプロシージャを使用します。
-
また、1つ以上のSQL文のカーソル・キャッシュに存在する計画をSTSに取得してから、このプロシージャを使用することもできます。
174.6.17 MIGRATE_STORED_OUTLINEファンクション
このファンクションは、1つ以上のSQL文のストアド・アウトラインをSQL管理ベース(SMB)の計画ベースラインに移行します。ユーザーは、アウトライン名、SQLテキストまたはアウトライン・カテゴリに基づいてどのストアド・アウトラインを移行するか指定することができ、またシステムにあるすべてのストアド・アウトラインをSQL計画ベースラインに移行することもできます。
このファンクションの2番目のオーバーロードは、1つ以上のSQL文のストアド・アウトラインを1つ以上のアウトライン名を付与されたSQL管理ベース(SMB)の計画ベースラインに移行します。
構文
DBMS_SPM.MIGRATE_STORED_OUTLINE ( attribute_name IN VARCHAR2, attribute_value IN CLOB, fixed IN VARCHAR2 := 'NO') RETURN CLOB; DBMS_SPM.MIGRATE_STORED_OUTLINE ( outln_list IN DBMS_SPM.NAME_LIST, fixed IN VARCHAR2 := 'NO') RETURN CLOB;
パラメータ
表174-22 MIGRATE_STORED_OUTLINEファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
|
|
|
|
|
|
移行するアウトライン名のリスト。 |
戻り値
次のような、移行中に統計を説明する書式設定されたレポートを含むCLOB
。
-
正常に移行されたストアド・アウトラインの数。
-
移行に失敗したストアド・アウトラインの数(および対応するアウトライン名)と失敗の理由。
使用上のノート
-
ユーザーがアウトライン名を指定すると、ファンクションは、移行する単一のストアド・アウトラインを一意に識別する付与されたアウトライン名に基づいてストアド・アウトラインを計画ベースラインに移行します。
-
ユーザーがSQLテキストを指定すると、ファンクションは指定したSQL文のために作成されたすべてのストアド・アウトラインを移行します。単一のSQL文は、異なるカテゴリ名の下で作成した複数のストアド・アウトラインを持つことができます。各ストアド・アウトラインに1つの計画ベースライン計画が作成されます。新しい計画ベースラインには、
DEFAULT
に設定されたカテゴリ名があります。計画ベースラインのモジュール名は、ストアド・アウトラインと同じになるように設定されます。 -
ユーザーがカテゴリ名を指定すると、ファンクションは指定したカテゴリ名があるすべてのストアド・アウトラインを移行します。SQL文ごとのカテゴリごとに1つのストアド・アウトラインのみが存在します。各ストアド・アウトラインに1つの計画ベースラインが作成されます。
-
ユーザーが
all
の移行を指定すると、ファンクションは、システムにあるすべてのストアド・アウトラインを計画ベースラインに移行します。各ストアド・アウトラインに1つの計画ベースラインが作成されます。
174.6.18 PACK_STGTAB_BASELINEファンクション
このファンクションは、SQL管理ベースからステージング表にSQL計画ベースラインをパック(エクスポート)します。
構文
DBMS_SPM.PACK_STGTAB_BASELINE ( table_name IN VARCHAR2, table_owner IN VARCHAR2 := NULL, sql_handle IN VARCHAR2 := NULL, plan_name IN VARCHAR2 := NULL, sql_text IN CLOB := NULL, creator IN VARCHAR2 := NULL, origin IN VARCHAR2 := NULL, enabled IN VARCHAR2 := NULL, accepted IN VARCHAR2 := NULL, fixed IN VARCHAR2 := NULL, module IN VARCHAR2 := NULL, action IN VARCHAR2 := NULL) RETURN NUMBER;
パラメータ
表174-23 PACK_STGTAB_BASELINEファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
SQL計画ベースラインのパック先のステージング表の名前(二重引用符で囲まれていないかぎり、大/小文字区別なし)。 |
|
ステージング表の所有者の名前。デフォルトの |
|
SQLハンドル(大/小文字区別) |
|
計画名(大/小文字区別、%ワイルドカードを使用可) |
|
SQLテキスト文字列(大/小文字区別、%ワイルドカードを使用可) |
|
SQL計画ベースラインの作成者(二重引用符で囲まれていないかぎり、大/小文字区別なし) |
|
SQL計画ベースラインの起点。 |
|
' |
|
' |
|
' |
|
モジュール(大/小文字区別) |
|
アクション(大/小文字区別) |
戻り値
パックしたSQL計画ベースラインの数。
174.6.19 RESET_EVOLVE_TASKプロシージャ
このプロシージャは、進化タスクを初期状態にリセットします。
タスクから、すべての中間結果が削除されます。現在実行されていないタスクに対してこのプロシージャ呼び出します。
構文
DBMS_SPM.RESET_EVOLVE_TASK ( task_name IN VARCHAR2);
パラメータ
表174-24 RESET_EVOLVE_TASKプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
リセットするタスクの識別子。 |
174.6.20 RESUME_EVOLVE_TASKプロシージャ
このプロシージャは、以前に中断したタスクを再開します。
構文
DBMS_SPM.RESUME_EVOLVE_TASK ( task_name IN VARCHAR2);
パラメータ
表174-25 RESUME_EVOLVE_TASKプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
再開するタスクの識別子。 |
174.6.21 REPORT_AUTO_EVOLVE_TASKファンクション
このプロシージャは、自動進化タスクの実行結果を表示します。
構文
DBMS_SPM.REPORT_AUTO_EVOLVE_TASK ( type IN VARCHAR2 := TYPE_TEXT, level IN VARCHAR2 := LEVEL_TYPICAL, section IN VARCHAR2 := SECTION_ALL, object_id IN NUMBER := NULL, execution_name IN VARCHAR2 := NULL) RETURN CLOB;
パラメータ
表174-26 REPORT_AUTO_EVOLVE_TASKファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
レポートのタイプ。可能な値は |
|
レポートの形式。可能な値は |
|
レポート内の特定のセクション。可能な値は |
|
単一の計画を表すアドバイザ・フレームワーク・オブジェクトの識別子。 |
|
実行を修飾して識別するための名前。 |
戻り値
レポート
174.6.22 REPORT_EVOLVE_TASKファンクション
このプロシージャは、進化したタスクの結果を表示します。
構文
DBMS_SPM.REPORT_EVOLVE_TASK ( task_name IN VARCHAR2, type IN VARCHAR2 := TYPE_TEXT, level IN VARCHAR2 := LEVEL_TYPICAL, section IN VARCHAR2 := SECTION_ALL, object_id IN NUMBER := NULL, task_owner IN VARCHAR2 := NULL, execution_name IN VARCHAR2 := NULL) RETURN CLOB;
パラメータ
表174-27 REPORT_EVOLVE_TASKファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
レポートするタスクの識別子。 |
|
レポートのタイプ。可能な値は |
|
レポートの形式。可能な値は |
|
レポート内の特定のセクション。可能な値は |
|
単一の計画を表すアドバイザ・フレームワーク・オブジェクトの識別子。 |
|
進化タスクの所有者。デフォルトは、現行のスキーマ所有者です。 |
|
実行を修飾して識別するための名前。 |
戻り値
レポート
174.6.23 SET_EVOLVE_TASK_PARAMETERプロシージャ
このプロシージャは、進化タスクのパラメータをVARCHAR2
またはNUMBER
に設定します
構文
DBMS_SPM.SET_EVOLVE_TASK_PARAMETER (
task_name IN VARCHAR2,
parameter IN VARCHAR2,
value IN NUMBER);
DBMS_SPM.SET_EVOLVE_TASK_PARAMETER (
task_name IN VARCHAR2 := NULL,
parameter IN VARCHAR2,
value IN VARCHAR2);
パラメータ
表174-28 SET_EVOLVE_TASK_PARAMETERプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
進化タスク名 |
|
設定するパラメータの名前(次の表を参照) |
|
パラメータの値(次の表を参照) |
次の表に、SET_EVOLVE_TASK_PARAMETER
プロシージャのパラメータを示します。
表174-29 DBMS_SPM.SET_EVOLVE_TASK_PARAMETERパラメータ
パラメータ | 説明 | デフォルト |
---|---|---|
|
追加の計画を検索するソースを決定します。
複数の値をプラス記号( |
デフォルトは、SPM展開アドバイザのタスクが自動か手動かによって決まります。
|
|
ロードする代替計画を決定します。
|
|
|
ロードする計画の合計最大数を指定します(SQL文ごとの制限ではありません)。 |
デフォルトは、SPM展開アドバイザのタスクが自動か手動かによって決まります。
|
|
推奨された計画を自動的に受け入れるかどうかを指定します。
|
|
|
グローバル時間制限(秒)。これは、タスクに許可される合計時間です。 |
デフォルトは、SPM展開アドバイザのタスクが自動か手動かによって決まります。
|
参照:
各種エディションおよびサービスでサポートされる機能の詳細は、『Oracle Databaseライセンス情報ユーザー・マニュアル』を参照
174.6.24 UNPACK_STGTAB_BASELINEファンクション
このファンクションは、ステージング表からSQL管理ベースにSQL計画ベースラインをアンパック(インポート)します。
構文
DBMS_SPM.UNPACK_STGTAB_BASELINE ( table_name IN VARCHAR2, table_owner IN VARCHAR2 := NULL, sql_handle IN VARCHAR2 := NULL, plan_name IN VARCHAR2 := NULL, sql_text IN CLOB := NULL, creator IN VARCHAR2 := NULL, origin IN VARCHAR2 := NULL, enabled IN VARCHAR2 := NULL, accepted IN VARCHAR2 := NULL, fixed IN VARCHAR2 := NULL, module IN VARCHAR2 := NULL, action IN VARCHAR2 := NULL) RETURN NUMBER;
パラメータ
表174-30 UNPACK_STGTAB_BASELINEファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
SQL計画ベースラインのアンパック元のステージング表の名前(二重引用符で囲まれていないかぎり、大/小文字区別なし)。 |
|
ステージング表の所有者の名前。デフォルトのNULLにすると、現行のスキーマが表の所有者になります。 |
|
SQLハンドル(大/小文字区別) |
|
計画名(大/小文字区別、%ワイルドカードを使用可) |
|
SQLテキスト文字列(大/小文字区別、%ワイルドカードを使用可) |
|
SQL計画ベースラインの作成者(二重引用符で囲まれていないかぎり、大/小文字区別なし) |
|
SQL計画ベースラインの起点。 |
|
' |
|
' |
|
' |
|
モジュール(大/小文字区別) |
|
アクション(大/小文字区別) |
戻り値
アンパックした計画の数。