DBMS_SPM
パッケージは、様々なSQL文に対して保持される、計画履歴およびSQL計画のベースラインに対する制御された操作を実行するためのインタフェースを、DBAおよびその他のユーザーに提供することによって、SQL計画管理機能をサポートします。
関連項目: 詳細は、『Oracle Database SQLチューニング・ガイド』のSQL計画管理の使用方法に関する項を参照してください。 |
この章では、次の項目について説明します。
概要
セキュリティ・モデル
定数
例
DBMS_SPM
パッケージを使用すると、ユーザーはSQL計画管理を使用して、SQL実行計画を管理できます。SQL計画管理は、長期間にわたってSQL文の実行計画を記録し評価することで、SQL文の実行計画の突然の変更によってパフォーマンスが低下するのを防止し、効果的であることが判明している既存の計画セットで構成されるSQL計画ベースラインを作成します。次にSQL計画ベースラインを使用して、システムで発生する変更とは無関係に、対応するSQL文のパフォーマンスを保持します。SQL計画管理がSQLのパフォーマンスを向上または保持する一般的な使用のシナリオには次のようなものがあります。
新しいバージョンのオプティマイザをインストールするデータベースのアップグレードにより、通常わずかな割合のSQL文に対して計画が変更され、計画の変更のほとんどでパフォーマンスの変更も向上も発生しません。ただし、一部の計画変更はパフォーマンスの低下の原因になる場合があります。SQL計画ベースラインを使用すると、データベースのアップグレードが原因でパフォーマンスの低下が発生する可能性は大幅に減少します。
継続的なシステムおよびデータの変更は一部のSQL文の計画に影響を与え、パフォーマンスの低下の原因になる場合があります。SQL計画ベースラインを使用すると、パフォーマンスの低下が最小限に抑えられ、SQLのパフォーマンスが安定します。
新しいアプリケーション・モジュールをデプロイメントすることは、システムに新しいSQL文を導入することを意味します。アプリケーション・ソフトウェアは、新しいSQL文の標準テスト構成で開発された適切なSQL実行計画を使用できます。システムの本番構成がテスト構成と大幅に異なる場合は、パフォーマンスを向上するために時間をかけてSQL計画ベースラインを進化させることができます。
このパッケージの所有者はSYS
です。パッケージのプロシージャを実行するには、EXECUTE
パッケージ権限が必要です。ADMINISTER
SQL
MANAGEMENT
OBJECT
権限を付与されているすべてのユーザーがDBMS_SPM
パッケージを実行できます。
DBMS_SPM
パッケージでは、表148-1「DBMS_SPMの定数」に示す定数が使用されます。これらの定数は、EVOLVE_SQL_PLAN_BASELINEファンクション
のtime_limitパラメータの標準入力として定義されます。
表148-1 DBMS_SPMの定数
定数 | タイプ | 値 | 説明 |
---|---|---|---|
|
|
|
EVOLVE_SQL_PLAN_BASELINEファンクションにより費やされる適切な時間が判断されます。 |
|
|
|
EVOLVE_SQL_PLAN_BASELINEファンクションにより費やされる時間に制限はありません。 |
DBMS_SPM
パッケージは、TABLE
タイプを定義します。
次の表に、このパッケージのサブプログラムをアルファベット順に示します。
表148-2 DBMS_SPMパッケージのサブプログラム
サブプログラム | 説明 |
---|---|
ACCEPT_SQL_PLAN_BASELINEプロシージャ |
進化タスクのリコメンデーションに基づいて計画を受け入れます。 |
ALTER_SQL_PLAN_BASELINEファンクション |
属性名/値の形式でSQL文と関連付けられている1つまたはすべての計画の属性を変更します。 |
|
現在実行中の進化タスクを取り消します。 |
|
パラメータ/値の形式でSQL管理ベースの構成オプションを設定します。 |
|
アドバイザのタスクを作成し、そのパラメータを設定します。 |
|
システム間でのSQL計画ベースラインの転送に使用するステージング表を作成します。 |
|
進化したタスクを削除します。 |
|
SQL文に関連付けられている1つまたはすべての計画を削除します。 |
EVOLVE_SQL_PLAN_BASELINEファンクション |
1つ以上のSQL文に関連付けられているSQL計画ベースラインを進化させます。 |
|
以前に作成した進化タスクを実行します。 |
|
進化タスクのリコメンデーションに基づいて計画を実装します。 |
|
現在実行中の進化タスクを中断します。 |
LOAD_PLANS_FROM_CURSOR_CACHEファンクション |
SQL文のカーソル・キャッシュに存在する1つ以上の計画をロードします。 |
|
SQLチューニング・セット(STS)に保存されている計画をSQL計画ベースラインにロードします。 |
|
既存のストアド・アウトラインをSQL計画ベースラインに移行します。 |
|
SQL管理ベースからステージング表にSQL計画ベースラインをパック(エクスポート)します。 |
|
進化タスクを初期状態にリセットします。 |
|
以前に中断したタスクを再開します。 |
REPORT_AUTO_EVOLVE_TASKファンクション |
自動進化タスクの実行結果を表示します。 |
|
進化したタスクの結果を表示します。 |
SET_EVOLVE_TASK_PARAMETERプロシージャ |
進化タスクのパラメータを設定します。 |
|
ステージング表からSQL管理ベースにSQL計画ベースラインをアンパック(インポート)します。 |
このプロシージャは、進化タスクのリコメンデーションに基づいて計画を受け入れます。
構文
DBMS_SPM.ACCEPT_SQL_PLAN_BASELINE ( task_name IN VARCHAR2, object_id IN NUMBER := NULL, task_owner IN VARCHAR2 := NULL, force IN BOOLEAN := FALSE);
このファンクションは、属性名/値の形式で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;
パラメータ
表148-4 ALTER_SQL_PLAN_BASELINEファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
SQL文のハンドル。属性変更のためにSQL文に関連付けられている計画を識別します。 |
|
計画名。特定の計画を識別します。デフォルトの |
|
設定する計画属性の名前(次の表を参照)。 |
|
設定する計画属性の値(次の表を参照)。 |
表148-5 ALTER_SQL_PLAN_BASELINEファンクションのパラメータの名前および値
名前 | 説明 | 設定可能な値 |
---|---|---|
|
' |
' |
|
' |
' |
|
' |
' |
|
計画の名前。 |
最大30文字の文字列 |
|
計画の説明。 |
最大500バイトの文字列 |
このプロシージャは、パラメータ/値の形式でSQL管理ベースの構成オプションを設定します。このファンクションは、構成オプションを設定するたびに何回もコールできます。
このファンクションには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;
パラメータ
表148-9 CREATE_EVOLVE_TASKファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
SQL文のハンドル。デフォルトの |
|
計画名のリスト。計画は、異なるSQL文に属している場合があります。 |
|
計画の識別子。デフォルトの |
|
時間制限(分)。時間制限はグローバルで、次の方法で使用されます。最初の未承認の計画の時間制限は、入力値と同じです。2番目の未承認の計画の時間制限は、入力値から最初の計画の検証で費やした時間を差し引いた値になります。それ以降の時間制限も、同様の方法で計算します。デフォルトの |
|
進化タスク名。 |
|
タスクの説明(最大256文字)。 |
このプロシージャは、システム間でのSQL計画ベースラインの転送に使用するステージング表を作成します。
構文
DBMS_SPM.CREATE_STGTAB_BASELINE ( table_name IN VARCHAR2, table_owner IN VARCHAR2 := NULL, tablespace_name IN VARCHAR2 := NULL);
使用上の注意
ステージング表の作成が最初の手順です。システム間でSQL計画ベースラインを移行するには、次の一連の手順を実行する必要があります。
ソース・システムにステージング表を作成します。
ソース・システムでSQL計画ベースラインを選択して、ステージング表にパックします。
Oracle EXPユーティリティまたはOracle Data Pumpを使用して、フラット・ファイルにステージング表をエクスポートします。
ターゲット・システムにフラット・ファイルを転送します。
Oracle IMPユーティリティまたはOracle Data Pumpを使用して、フラット・ファイルからステージング表をインポートします。
ステージング表からSQL計画ベースラインを選択して、ターゲット・システムにアンパックします。
このファンクションは、SQL文に関連付けられている1つまたはすべての計画を削除します。
構文
DBMS_SPM.DROP_SQL_PLAN_BASELINE ( sql_handle IN VARCHAR2 := NULL, plan_name IN VARCHAR2 := NULL) RETURN PLS_INTEGER;
このファンクションは、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;
パラメータ
表148-13 EVOLVE_SQL_PLAN_BASELINEファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
SQL文の識別子。 |
|
計画の識別子。デフォルトの |
|
計画名のリスト。リストないの各計画は、同じSQL文に属するものでも、別のSQL文に属するものでもかまいません。 |
|
時間制限(分)。これは
|
|
未承認の計画を承認済の計画に変更する前に、計画を実行し、パフォーマンスを比較するかどうかを指定します。パフォーマンスの検証では、未承認の計画および対応するSQL計画ベースラインから選択された計画が実行され、これらの計画のパフォーマンス統計が比較されます。未承認の計画でパフォーマンスが向上した場合、未承認の計画は承認済の計画に変更されます。
|
|
未承認の計画の
|
このファンクションは、以前に作成した進化タスクを実行します。
構文
DBMS_SPM.EXECUTE_EVOLVE_TASK ( task_name IN VARCHAR2, execution_name IN VARCHAR2 := NULL, execution_desc IN VARCHAR2 := NULL); RETURN VARCHAR2;
このファンクションは、進化タスクによって推奨されているすべてのアクションを実装します。
構文
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;
このプロシージャは、現在実行中の進化タスクを中断します。このタスクは、通常の終了時と同様に操作を終了し、ユーザーは中間結果にアクセスできます。タスクは後で再開できます。
このファンクションは、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;
パラメータ
表148-17 LOAD_PLANS_FROM_CURSOR_CACHEファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
SQL文の識別子。カーソル・キャッシュ内のSQL文を識別します。注意: 3番目のオーバーロードでは、識別されたSQL文のテキストがカーソル・キャッシュから抽出され、計画のロード先となるSQL計画ベースラインの特定にそのテキストが使用されます。SQL計画ベースラインが存在しない場合は作成されます。 |
|
計画の識別子。デフォルトの |
|
計画のロード先となるSQL計画ベースラインを特定する場合に使用されるSQLテキスト。SQL計画ベースラインが存在しない場合は作成されます。ユーザーがSQL文のテキストにヒントを追加してSQL文をチューニングし、その結果生成された計画を元のSQL文のSQL計画ベースラインにロードする場合は、テキストの使用が重要となります。 |
|
計画のロード先となるSQL計画ベースラインを特定する場合に使用されるSQLハンドル。 |
|
デフォルトの |
|
次の属性名のいずれかになります。
|
|
属性値は、属性名が' |
|
デフォルトの' |
このファンクションは、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;
パラメータ
表148-18 LOAD_PLANS_FROM_SQLSETファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
SQL計画ベースラインに計画をロードするSTSの名前。 |
|
STSの所有者。 |
|
条件を満たす計画のみをロード対象として選択するためにSTSに適用されるフィルタ。このフィルタは、 |
|
デフォルトの' |
|
デフォルトの' |
|
定期的なコミットを実行する前にロードするSQL計画の数。UNDOログのサイズ縮小に役立ちます。 |
このファンクションは、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;
パラメータ
表148-19 MIGRATE_STORED_OUTLINEファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
|
|
|
|
|
|
移行するアウトライン名のリスト。 |
戻り値
次のような、移行中に統計を説明する書式設定されたレポートを含むCLOB
。
正常に移行されたストアド・アウトラインの数。
移行に失敗したストアド・アウトラインの数(および対応するアウトライン名)と失敗の理由。
使用上の注意
ユーザーがアウトライン名を指定すると、ファンクションは、移行する単一のストアド・アウトラインを一意に識別する付与されたアウトライン名に基づいてストアド・アウトラインを計画ベースラインに移行します。
ユーザーがSQLテキストを指定すると、ファンクションは指定したSQL文のために作成されたすべてのストアド・アウトラインを移行します。単一のSQL文は、異なるカテゴリ名の下で作成した複数のストアド・アウトラインを持つことができます。各ストアド・アウトラインに1つの計画ベースライン計画が作成されます。新しい計画ベースラインには、DEFAULT
に設定されたカテゴリ名があります。計画ベースラインのモジュール名は、ストアド・アウトラインと同じになるように設定されます。
ユーザーがカテゴリ名を指定すると、ファンクションは指定したカテゴリ名があるすべてのストアド・アウトラインを移行します。SQL文ごとのカテゴリごとに1つのストアド・アウトラインのみが存在します。各ストアド・アウトラインに1つの計画ベースラインが作成されます。
ユーザーがall
の移行を指定すると、ファンクションは、システムにあるすべてのストアド・アウトラインを計画ベースラインに移行します。各ストアド・アウトラインに1つの計画ベースラインが作成されます。
このファンクションは、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;
パラメータ
表148-20 PACK_STGTAB_BASELINEファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
SQL計画ベースラインのパック先のステージング表の名前(二重引用符で囲まれていないかぎり、大/小文字区別なし)。 |
|
ステージング表の所有者の名前。デフォルトの |
|
SQLハンドル(大/小文字区別) |
|
計画名(大/小文字区別、%ワイルドカードを使用可) |
|
SQLテキスト文字列(大/小文字区別、%ワイルドカードを使用可) |
|
SQL計画ベースラインの作成者(二重引用符で囲まれていないかぎり、大/小文字区別なし) |
|
SQL計画ベースラインの起点。 |
|
' |
|
' |
|
' |
|
モジュール(大/小文字区別) |
|
アクション(大/小文字区別) |
このプロシージャは、進化タスクを初期状態にリセットします。タスクから、すべての中間結果が削除されます。現在実行されていないタスクに対してこのプロシージャ呼び出します。
このプロシージャは、自動進化タスクの実行結果を表示します。
構文
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;
パラメータ
表148-23 REPORT_AUTO_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;
パラメータ
表148-24 REPORT_EVOLVE_TASKファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
レポートするタスクの識別子。 |
|
レポートのタイプ。可能な値は |
|
レポートの形式。可能な値は |
|
レポート内の特定のセクション。可能な値は |
|
単一の計画を表すアドバイザ・フレームワーク・オブジェクトの識別子。 |
|
進化タスクの所有者。デフォルトは、現行のスキーマ所有者です。 |
|
実行を修飾して識別するための名前。 |
このプロシージャは、進化タスクのパラメータをNUMBER
またはVARCHAR2
に設定します。
このファンクションは、ステージング表から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;
パラメータ
表148-26 UNPACK_STGTAB_BASELINEファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
SQL計画ベースラインのアンパック元のステージング表の名前(二重引用符で囲まれていないかぎり、大/小文字区別なし)。 |
|
ステージング表の所有者の名前。デフォルトのNULLにすると、現行のスキーマが表の所有者になります。 |
|
SQLハンドル(大/小文字区別) |
|
計画名(大/小文字区別、%ワイルドカードを使用可) |
|
SQLテキスト文字列(大/小文字区別、%ワイルドカードを使用可) |
|
SQL計画ベースラインの作成者(二重引用符で囲まれていないかぎり、大/小文字区別なし) |
|
SQL計画ベースラインの起点。 |
|
' |
|
' |
|
' |
|
モジュール(大/小文字区別) |
|
アクション(大/小文字区別) |