DBMS_SQLTUNEパッケージは、SQL文をチューニングするためのインタフェースを提供します。
この章では、次の項目について説明します。
概要
セキュリティ・モデル
SQLチューニング・アドバイザ・サブプログラム
SQLプロファイル・サブプログラム
SQLチューニング・セット・サブプログラム
リアルタイムSQL監視サブプログラム
DBMS_SQLTUNE
パッケージは、相互に関連する次のいくつかの機能領域を提供します。
SQLチューニング・アドバイザ
アドバイザ・スイートの1つであるSQLチューニング・アドバイザは、データベースのパフォーマンス問題を特定および解決する一連のエキスパート・システムです。具体的には、SQLチューニング・アドバイザによって、問題のあるSQL文のチューニング・プロセスが自動化されます。つまり、SQLチューニング・アドバイザに1つ以上のSQL文を入力すると、その文のチューニング方法に関する的確なアドバイスを取得できます。このアドバイスは、予測されるパフォーマンス上のメリットとともに、SQLをチューニングするための正確なSQLアクションの形で提供されます。
SQLチューニング・アドバイザ・サブプログラムのグループには、アドバイザにアクセスするためのタスク指向のインタフェースが用意されています。次に示すサブプログラムを、次の順序でコールすると、SQLチューニング・アドバイザの機能の一部を使用できます。
CREATE_TUNING_TASKファンクションを使用して、1つの文またはSQL文の集合をチューニングするためのチューニング・タスクを作成します。
EXECUTE_TUNING_TASKファンクションおよびプロシージャを使用して、作成したチューニング・タスクを実行します。
REPORT_TUNING_TASKファンクションを使用して、チューニング・タスクの結果を表示します。
SCRIPT_TUNING_TASKファンクションを使用して、SQL*PLUSスクリプトを作成します。その後、このスクリプトを実行すると、アドバイザによる一連のリコメンデーションを実装できます。
SQLプロファイル・サブプログラム
SQLチューニング・アドバイザによって、文のパフォーマンスを向上させるSQLプロファイルの作成を推奨される場合があります。SQLプロファイルは、その文に固有な補助統計で構成されます。カーディナリティ、選択性およびコストは問合せオプティマイザによって推定されますが、これらの値が大幅にずれているために不適切な実行計画が生成される場合があります。SQLプロファイルは、サンプリングおよび部分的に実行する方法を使用して追加情報を収集し、これらの推定を調整することで、この問題に対処します。
SQLプロファイル・サブプログラムのグループでは、特定の単一SQL文を対象とするオプティマイザに統計情報を伝えるためのメカニズムが用意されています。可能なかぎり正確な統計情報を伝えることによって、オプティマイザでその文に対する優れた判断を行うことができるようにします。次に例を示します。
ACCEPT_SQL_PROFILEプロシージャおよびファンクションを使用すると、SQLチューニング・アドバイザによって推奨されたSQLプロファイルを受け入れることができます。
ALTER_SQL_PROFILEプロシージャを使用すると、既存のSQLプロファイルの属性(STATUS
、NAME
、DESCRIPTION
およびCATEGORY
)を変更できます。
DROP_SQL_PROFILEプロシージャを使用すると、SQLプロファイルを削除できます。
SQLチューニング・セット
SQLチューニング・アドバイザには、1つまたは一連のSQL文を入力できます。複数の文を1つのアドバイザ・タスクでチューニングする場合は、SQLチューニング・セット(STS)の形式で入力します。SQLチューニング・セットは、SQL文およびその実行コンテキストをシステム提供のスキーマ内に格納するデータベース・オブジェクトです。SQLチューニング・セットでは、SQLのワークロードを処理するためのインフラストラクチャが用意されているため、大量のSQL文を簡単にチューニングできます。
SQLチューニング・セットでSQL文とともに格納されるものは、次のとおりです。
解析スキーマ名、バインド値などの実行コンテキスト。
平均経過時間、実行件数などの実行統計情報。
実行計画(SQL文を実行するために行われる一連の操作)。
行ソース統計(計画で実行される各操作の処理行数など)。
SQLチューニング・セットを作成する場合は、次のソースを使用してSQL文にフィルタ処理やランキングを実行します。
カーソル・キャッシュ(SELECT_CURSOR_CACHEファンクションを使用)。
自動ワークロード・リポジトリの先頭にあるSQL文(SELECT_WORKLOAD_REPOSITORYファンクションを使用)。
その他のSQLチューニング・セット(SELECT_SQLSETファンクションを使用)。
SQLトレース・ファイル(SELECT_SQL_TRACEファンクションを使用)。
ユーザー定義ワークロード。
この機能は、すべてのSQLチューニング・セット・サブプログラムを使用すると、簡単に実行できます。次に例を示します。
データベース内にSQLチューニング・セットを作成する場合は、CREATE_SQLSETプロシージャおよびファンクションを使用します。
選択した一連のSQLをSQLチューニング・セットに入力する場合は、LOAD_SQLSETプロシージャを使用します。
指定した期間にわたってカーソル・キャッシュからSQL文を収集し、システム・ワークロードの実際の状況を確認しようとする場合は、CAPTURE_CURSOR_CACHE_SQLSETプロシージャを使用します。
SQLチューニング・セットおよびSQLプロファイルのインポート/エクスポート
DBMS_SQLTUNE
サブプログラムを使用して、共通のプログラム・モデルを使用するシステム間でSQLプロファイルおよびSQLチューニング・セットを移動します。いずれの場合も、ソース・システム上にステージング表を作成し、関連するデータをそのステージング表に入力します。次に、選択した方法(データポンプ、インポート/エクスポート、データベース・リンクなど)に従ってそのステージング表を移動先システムに移動し、そのステージング表を使用してオブジェクトを元の形式で再構成します。この手順は、このパッケージに含まれているサブプログラムによって実行されます。
CREATE_STGTAB_SQLPROFプロシージャまたはCREATE_STGTAB_SQLSETプロシージャをコールして、ソース・システム上にステージング表を作成します。
PACK_STGTAB_SQLPROFプロシージャまたはPACK_STGTAB_SQLSETプロシージャをコールして、ソース・システムの情報をステージング表に入力します。
ステージング表を移動先システムに移動した後、UNPACK_STGTAB_SQLPROFプロシージャまたはUNPACK_STGTAB_SQLSETプロシージャをコールして、新しいシステム上でオブジェクトを再作成します。
関連項目: プログラム・フローの詳細は、『Oracle Databaseパフォーマンス・チューニング・ガイド』を参照してください。 |
自動チューニング・タスク・ファンクション
"SYS_AUTO_SQL_TUNING_TASK
"というシステム・タスクが予約されています。このタスクでは、自動タスク・フレームワーク内のメンテナンス・ウィンドウでSQLチューニングが実行されます。AWRから一連の高負荷SQLが自動的に選択され、それらのSQLに対してSQLチューニング・アドバイザが実行されます。他のSQLチューニング・タスクと同じ包括的な分析が実行されます。また、新旧のクエリー・プランを実行して検出されたSQLプロファイルがテストされ、メリットの大きいSQLプロファイルが実装されます。SQLプロファイルは、新しいプランのメリットをシステムで自動的に得ることができるように、チューニング後すぐに実装されます。各メンテナンス・ウィンドウでは、タスクの結果を新しい実行として格納できるため、タスクの期間中はすべての結果を使用できます。これらの結果は、タスク名で相互に関連付けられ、実行名で区別されています。 DBA_ADVISOR_EXECUTIONS
ビューを使用すると、タスクの実行に関する情報を表示できます。自動タスクは、カスタム・スクリプトの一部としてシステムで作成されます。 この自動タスクには、レポートの表示専用のインタフェース(REPORT_AUTO_TUNING_TASKファンクション)があり、標準的なチューニング・タスクと他のインタフェースを共有します。 このタスクには、複数の実行にわたるレポートの表示専用のインタフェースがあります。自動タスクのパラメータを設定するには、SET_TUNING_TASK_PARAMETERプロシージャを使用します。 タスクをすぐに実行するには、EXECUTE_TUNING_TASKファンクションおよびプロシージャのファンクション・バージョンを使用します。 タスクを無効にするには、DBMS_AUTO_TASK_ADMINパッケージを使用します。
リアルタイムSQL監視
リアルタイムSQL監視を使用すると、DBAまたはパフォーマンス・アナリストは、長時間にわたって実行されるSQL文の実行を、実行中に監視できます。カーソルの統計(CPU時間、IO時間など)と実行計画の統計(出力行、メモリー、使用される一時領域の数など)の両方が、文の実行中にほぼリアルタイムで更新されます。 これらの統計は、2つの新しい固定ビュー(V$SQL_MONITOR
およびV$SQL_PLAN_MONITOR
)に公開されます。 また、DBMS_SQLTUNE
パッケージには、監視情報をレポートするためのサブプログラムREPORT_SQL_MONITOR()が用意されています。
このパッケージは、PUBLIC
で使用可能で、独自のセキュリティ・チェックが実行されます。
SQLチューニング・アドバイザはアドバイザ・フレームワークに依存しているため、すべてのチューニング・タスク・インタフェース(XXX_TUNING_TASK
)を使用するにはADVISOR
権限が必要です。
SQLチューニング・セット・サブプログラム(XXX_SQLSET
)を使用するには、ADMINISTER
SQL
TUNING
SET
権限またはADMINISTER
ANY
SQL
TUNING
SET
権限が必要です。ADMINISTER
SQL
TUNING
SET
権限を持つユーザーは、ユーザー自身が所有するSQLチューニング・セットのみを作成および変更できます。ADMINISTER
ANY
SQL
TUNING
SET
権限を持っている場合は、すべてのSQLチューニング・セット(他のユーザーが所有するものも含む)に対して操作を行うことができます。 たとえば、CREATE_SQLSETプロシージャおよびファンクションを使用すると、他のユーザーが所有するように設定されたSQLチューニング・セットを作成できます。この場合、そのユーザーは、ADMINISTER
SQL
TUNING
SET
権限がなくてもチューニング・セットを操作できます。
以前は、SQLプロファイルに関連するサブプログラムを起動するには、次の3つの異なる権限が必要でした。
CREATE
ANY
SQL
PROFILE
ALTER
ANY
SQL
PROFILE
DROP
ANY
SQL
PROFILE
これらの権限は使用しないで、ADMINISTER
SQL
MANAGEMENT
OBJECT
を使用することをお薦めします。
DBMS_SQLTUNE
パッケージは、次のOBJECT
タイプを定義します。
オブジェクト・タイプ
SQLSET_ROW
オブジェクトは、ユーザーのSQLチューニング・セットの内容をモデル化します。 SQLチューニング・セットは、論理的には、各SQLSET_ROW
に1つのSQL文とその実行コンテキスト、統計、バインドおよび計画が含まれているSQLSET_ROW
のコレクションです。 各SELECT_XXX
サブプログラムは、(sql_id
、plan_hash_value
)によって一意に識別されるSQLSET_ROW
のコレクションとしてデータ・ソースをモデル化します。 同様に、LOAD_SQLSET
プロシージャは、行タイプがSQLSET_ROW
のカーソルを入力時に使用し、ユーザーが要求するポリシーに従って各SQLSET_ROW
を個別に処理します。
DBMS_SQLTUNE
パッケージのいくつかのサブプログラムは、SQLチューニング・セットまたはデータ・ソースの内容に対して基本フィルタを使用できます。 これらのフィルタは、SQLSET_ROW
内に定義されている属性に基づいて表現されます。
構文
CREATE TYPE sqlset_row AS object ( sql_id VARCHAR(13), force_matching_signature NUMBER, sql_text CLOB, object_list sql_objects, bind_data RAW(2000), parsing_schema_name VARCHAR2(30), module VARCHAR2(48), action VARCHAR2(32), elapsed_time NUMBER, cpu_time NUMBER, buffer_gets NUMBER, disk_reads NUMBER, direct_writes NUMBER, rows_processed NUMBER, fetches NUMBER, executions NUMBER, end_of_fetch_count NUMBER, optimizer_cost NUMBER, optimizer_env RAW(2000), priority NUMBER, command_type NUMBER, first_load_time VARCHAR2(19), stat_period NUMBER, active_stat_period NUMBER, other CLOB, plan_hash_value NUMBER, sql_plan sql_plan_table_type, bind_list sql_binds)
属性
表125-1 SQLSET_ROWの属性
属性 | 説明 |
---|---|
|
一意なSQL ID。 |
|
リテラル、ケースおよび空白を除くシグネチャ。 |
|
文の全文。 |
|
現在、実装されていません。 |
|
このSQLに対して取得されるバインド・データ。 このパラメータの引数を指定し、 |
|
SQLが解析されるスキーマ。 |
|
SQLの最後のアプリケーション・モジュール。 |
|
SQLの最後のアプリケーション・アクション。 |
|
このSQL文の経過時間の合計。 |
|
このSQL文のCPU時間の合計。 |
|
バッファ取得回数の合計。 |
|
ディスク読取り回数の合計。 |
|
直接書込み回数の合計。 |
|
このSQL文による処理行数の合計。 |
|
フェッチ回数の合計。 |
|
このSQLの実行回数の合計。 |
|
文のすべての行がフェッチされ、文が完全に実行された回数。 |
|
このSQLのオプティマイザ・コスト。 |
|
このSQL文のオプティマイザ環境。 |
|
ユーザー定義の優先順位(1、2、3)。 |
|
文のタイプ( |
|
親カーソルのロード時間。 |
|
このSQL文の統計情報が収集された期間(秒)。 |
|
SQL文がアクティブだった有効期間(秒)。 |
|
他の列(ユーザー定義の属性用)。 |
|
計画の計画ハッシュ値。 |
|
EXPLAIN PLAN。 |
|
SQLに対するユーザー指定のバインドのリスト。これは、ユーザー指定のワークロードに対して使用されます。 このパラメータの引数を指定し、 |
DBMS_SQLTUNEのサブプログラムは、機能ごとに次のようにグループ分けされています。
このサブプログラム・グループは、SQLチューニング・タスクを管理するためのインタフェースを提供します。
表125-2 SQLチューニング・タスク・サブプログラム
サブプログラム | 説明 |
---|---|
|
現在実行中のチューニング・タスクを取り消します。 |
|
SQLチューニング・アドバイザ用に1つの文または1つのSQLチューニング・セットのチューニングを作成します。 |
|
SQLチューニング・タスクを削除します。 |
EXECUTE_TUNING_TASKファンクションおよびプロシージャ |
以前に作成したチューニング・タスクを実行します。 |
|
SQLチューニング・アドバイザによる一連のSQLプロファイル・リコメンデーションを実装します。 |
|
現在実行中のチューニング・タスクを中断します。 |
REPORT_AUTO_TUNING_TASKファンクション |
自動チューニング・タスクによるレポートを表示して、特定の範囲の実行についてレポートします。 |
|
チューニング・タスクの結果を表示します。 |
|
現在実行中のチューニング・タスクを初期状態にリセットします。 |
|
SQLチューニング・セットを処理するために作成され、以前に中断されたタスクを再開します。 |
|
SQL*PLUSスクリプトを作成します。その後、このスクリプトを実行すると、SQLチューニング・アドバイザによる一連のリコメンデーションを実装できます。 |
SET_TUNING_TASK_PARAMETERプロシージャ |
|
このパッケージ内のすべてのサブプログラムのリストは、「DBMS_SQLTUNEサブプログラムの要約」を参照してください。
このサブプログラム・グループは、SQLプロファイルを管理するためのインタフェースを提供します。
表125-3 SQLプロファイル・サブプログラム
サブプログラム | 説明 |
---|---|
ACCEPT_SQL_PROFILEプロシージャおよびファンクション |
指定されたチューニング・タスクのSQLプロファイルを作成します。 |
|
既存のSQLプロファイル・オブジェクトの特定の属性を変更します。 |
|
システム間でのSQLプロファイルのコピーに使用するステージング表を作成します。 |
|
データベースから名前付きSQLプロファイルを削除します。 |
|
|
|
ステージング表に保存されているプロファイル・データの値を、アンパック操作を実行する前に変更します。 |
|
SQLテキストのシグネチャを戻します。 |
|
ステージング表に保存されているプロファイル・データを使用して、このシステム上にプロファイルを作成します。 |
このパッケージ内のすべてのサブプログラムのリストは、「DBMS_SQLTUNEサブプログラムの要約」を参照してください。
このサブプログラム・グループは、SQLチューニング・セットを管理するためのインタフェースを提供します。
表125-4 SQLチューニング・セット・サブプログラム
サブプログラム | 説明 |
---|---|
|
新しい参照を既存のSQLチューニング・セットに追加して、クライアントによるその使用状況を示します。 |
CAPTURE_CURSOR_CACHE_SQLSETプロシージャ |
指定した期間、カーソル・キャッシュからワークロードを増分取得して、SQLチューニング・セットに入れます。 |
|
データベース内にSQLチューニング・セット・オブジェクトを作成します。 |
|
SQLチューニング・セットのインポートおよびエクスポートに使用するステージング表を作成します。 |
|
SQL文のセットをSQLチューニング・セットから削除します。 |
|
SQLチューニング・セットがアクティブでない場合はそれを削除します。 |
|
選択したSQLのセットをSQLチューニング・セットに入力します。 |
|
|
|
SQLチューニング・セットを非アクティブ化し、このSQLチューニング・セットをクライアントが使用していないことを示します。 |
|
カーソル・キャッシュからSQL文を収集します。 |
|
1つ以上のトレース・ファイルの内容を読み取り、検出したSQL文を |
|
既存のSQLチューニング・セットからSQL文を収集します。 |
SELECT_WORKLOAD_REPOSITORYファンクション |
ワークロード・リポジトリからSQL文を収集します。 |
|
ステージング表から1つ以上のSQLチューニング・セットをコピーします。 |
|
SQLチューニング・セットのSQL文の選択されている文字列フィールドを更新するか、SQLチューニング・セットのSQLの設定済の数値属性を更新します。 |
このパッケージ内のすべてのサブプログラムのリストは、「DBMS_SQLTUNEサブプログラムの要約」を参照してください。
このサブプログラム・グループでは、V$SQL_MONITOR
およびV$SQL_PLAN_MONITOR
に収集された監視データをレポートする機能が提供されています。
表125-6 DBMS_SQLTUNEパッケージのサブプログラム
サブプログラム | 説明 | グループ |
---|---|---|
ACCEPT_SQL_PROFILEプロシージャおよびファンクション |
指定されたチューニング・タスクのSQLプロファイルを作成します。 |
|
|
新しい参照を既存のSQLチューニング・セットに追加して、クライアントによるその使用状況を示します。 |
|
|
既存のSQLプロファイル・オブジェクトの特定の属性を変更します。 |
|
|
現在実行中のチューニング・タスクを取り消します。 |
|
CAPTURE_CURSOR_CACHE_SQLSETプロシージャ |
指定した期間、カーソル・キャッシュからワークロードを増分取得して、SQLチューニング・セットに入れます。 |
|
|
データベース内にSQLチューニング・セット・オブジェクトを作成します。 |
|
|
システム間でのSQLプロファイルのコピーに使用するステージング表を作成します。 |
|
|
SQLチューニング・セットのインポートおよびエクスポートに使用するステージング表を作成します。 |
|
|
SQLチューニング・アドバイザ用に1つの文または1つのSQLチューニング・セットのチューニングを作成します。 |
|
|
SQL文のセットをSQLチューニング・セットから削除します。 |
|
|
データベースから名前付きSQLプロファイルを削除します。 |
|
|
SQLチューニング・セットがアクティブでない場合はそれを削除します。 |
|
|
SQLチューニング・タスクを削除します。 |
|
EXECUTE_TUNING_TASKファンクションおよびプロシージャ |
以前に作成したチューニング・タスクを実行します。 |
|
|
SQLチューニング・アドバイザによる一連のSQLプロファイル・リコメンデーションを実装します。 |
|
|
現在実行中のチューニング・タスクを中断します。 |
|
|
選択したSQLのセットをSQLチューニング・セットに入力します。 |
|
|
|
|
|
|
|
|
ステージング表に保存されているプロファイル・データの値を、アンパック操作を実行する前に変更します。 |
|
|
ホスト・システム上とは異なる値でアンパックできるように、ステージング表内のチューニング・セットの名前および所有者を変更します。 |
|
|
SQLチューニング・セットを非アクティブ化し、このSQLチューニング・セットをクライアントが使用していないことを示します。 |
|
REPORT_AUTO_TUNING_TASKファンクション |
自動チューニング・タスクによるレポートを表示して、特定の範囲のサブタスクについてレポートします。 |
|
|
リアルタイムSQL監視に関するレポートを表示します。 |
|
|
チューニング・タスクの結果を表示します。 |
|
|
現在実行中のチューニング・タスクを初期状態にリセットします。 |
|
|
SQLチューニング・セットを処理するために作成され、以前に中断されたタスクを再開します。 |
|
|
SQL*PLUSスクリプトを作成します。その後、このスクリプトを実行すると、SQLチューニング・アドバイザによる一連のリコメンデーションを実装できます。 |
|
|
カーソル・キャッシュからSQL文を収集します。 |
|
|
1つ以上のトレース・ファイルの内容を読み取り、検出したSQL文を |
|
|
既存のSQLチューニング・セットからSQL文を収集します。 |
|
SELECT_WORKLOAD_REPOSITORYファンクション |
ワークロード・リポジトリからSQL文を収集します。 |
|
SET_TUNING_TASK_PARAMETERプロシージャ |
|
|
|
SQLテキストのシグネチャを戻します。 |
|
|
ステージング表に保存されているプロファイル・データを使用して、このシステム上にプロファイルを作成します。 |
|
|
ステージング表から1つ以上のSQLチューニング・セットを移動します。 |
|
|
SQLチューニング・セットのSQL文の選択されているフィールドを更新します。 |
|
このプロシージャおよびファンクションは、SQLチューニング・アドバイザによって推奨されるSQLプロファイルを作成します。SQLテキストは、マッチング用に正規化されていますが、データ・ディクショナリに格納される場合は読みやすさを考慮して正規化されていません。SQLテキストは、SQLチューニング・タスクへの参照を介して提供されます。参照されたSQL文が存在しない場合、エラーが報告されます。
構文
DBMS_SQLTUNE.ACCEPT_SQL_PROFILE ( task_name IN VARCHAR2, object_id IN NUMBER := NULL, name IN VARCHAR2 := NULL, description IN VARCHAR2 := NULL, category IN VARCHAR2 := NULL); task_owner IN VARCHAR2 := NULL, replace IN BOOLEAN := FALSE, force_match IN BOOLEAN := FALSE);
DBMS_SQLTUNE.ACCEPT_SQL_PROFILE ( task_name IN VARCHAR2, object_id IN NUMBER := NULL, name IN VARCHAR2 := NULL, description IN VARCHAR2 := NULL, category IN VARCHAR2 := NULL; task_owner IN VARCHAR2 := NULL, replace IN BOOLEAN := FALSE, force_match IN BOOLEAN := FALSE) RETURN VARCHAR2;
パラメータ
表125-7 ACCEPT_SQL_PROFILEプロシージャおよびファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
SQLチューニング・タスクの名前(必須)。 |
|
チューニング・タスクに関連付けられたSQL文を示すアドバイザ・フレームワーク・オブジェクトの識別子。 |
|
SQLプロファイルの名前。二重引用符は指定できません。大文字と小文字が区別されます。指定しない場合は、システムによってSQLプロファイルに一意の名前が付けられます。 |
|
SQLプロファイルの目的を記述したユーザー指定の文字列。256文字を超える場合は切り捨てられます。最大サイズは500文字です。 |
|
カテゴリ名。このSQLプロファイルを使用するセッションに対するセッションの |
|
チューニング・タスクの所有者。これはオプションのパラメータです。他のユーザーが所有するチューニング・タスクに関連付けられているSQLプロファイルを受け入れる場合に指定する必要があります。現行のユーザーがデフォルト値です。 |
|
プロファイルがすでに存在する場合にこの引数を |
|
|
戻り値
SQLプロファイルの名前。
使用上の注意
CREATE
ANY
SQL PROFILE
権限が必要です。
例
このサブプログラムのプロシージャ・バージョンとファンクション・バージョンの両方を同様に使用しますが、ファンクションを起動する場合は戻り値を指定する必要があります。次に示す例は、プロシージャにのみ適用されます。
この例では、ワークロード・リポジトリの1つのSQL文がチューニングされ、SQLチューニング・アドバイザが推奨するSQLプロファイルが作成されます。
variable stmt_task VARCHAR2(64); variable sts_task VARCHAR2(64); -- create a tuning task tune the statement EXEC :stmt_task := DBMS_SQLTUNE.CREATE_TUNING_TASK( begin_snap => 1, - end_snap => 2, - sql_id => 'ay1m3ssvtrh24'); -- execute the resulting task EXEC DBMS_SQLTUNE.EXECUTE_TUNING_TASK(:stmt_task); EXEC DBMS_SQLTUNE.ACCEPT_SQL_PROFILE(:stmt_task);
チューニングされたSQL文を表す場合、SQLチューニング・アドバイザによって作成されたアドバイザ・フレームワーク・オブジェクトのID(object_id
)を指定する必要はありません。
推奨されるSQLプロファイルがデフォルトで使用されないように、そのSQLプロファイルを別のカテゴリ(TEST
など)で受け入れることもできます。
EXEC DBMS_SQLTUNE.ACCEPT_SQL_PROFILE ( task_name => :stmt_task, - category => 'TEST');
コマンドALTER
SESSION
SET
SQLTUNE_CATEGORY
= 'TEST'
を使用すると、このプロファイルの動作を確認できます。
次のコールを実行すると、同じforce_matching_signature
が指定されているすべてのSQL文をチューニング対象とするSQLプロファイルが作成されます。
EXEC DBMS_SQLTUNE.ACCEPT_SQL_PROFILE (task_name => :stmt_task, - force_match => TRUE);
次の例のチューニング対象はSQLチューニング・セットですが、SQLプロファイルは、そのSQLチューニング・セット内の1つのSQL文のみに対して作成されます。SQL文は、IDが'5'のアドバイザ・フレームワーク・オブジェクトによって表されています。 チューニング・タスクに対して複数のSQLプロファイルが存在する可能性があるため、ACCEPT_SQL_PROFILE
プロシージャにオブジェクトIDを渡す必要があることに注意してください。このオブジェクトIDは、レポートとともに取得されます。
EXEC :sts_task := DBMS_SQLTUNE.CREATE_TUNING_TASK ( - sqlset_name => 'my_workload', - rank1 => 'ELAPSED_TIME', - time_limit => 3600, - description => 'my workload ordered by elapsed time'); -- execute the resulting task EXEC DBMS_SQLTUNE.EXECUTE_TUNING_TASK(:sts_task); -- create the profile for the sql statement corresponding to object_id = 5. EXEC DBMS_SQLTUNE.ACCEPT_SQL_PROFILE ( task_name => :sts_task, - object_id => 5);
このファンクションは、新しい参照を既存のSQLチューニング・セットに追加して、クライアントによるその使用状況を示します。
構文
DBMS_SQLTUNE.ADD_SQLSET_REFERENCE ( sqlset_name IN VARCHAR2, description IN VARCHAR2 := NULL) RETURN NUMBER;
パラメータ
表125-8 ADD_SQLSET_REFERENCEファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
SQLチューニング・セットの名前。 |
|
SQLチューニング・セットの使用方法の説明。256文字を超える場合は切り捨てられます。 |
戻り値
追加した参照の識別子。
例
SQLチューニング・セットへの参照を追加できます。これによって、使用中にチューニング・セットが変更されなくなります。参照は、SQLチューニング・セットに対してSQLチューニング・アドバイザを起動すると、自動的に追加されます。したがって、このファンクションは特別な目的でのみ使用してください。このファンクションは、後で削除する際に使用する参照IDを戻します。 SQLチューニング・セットへの参照を削除するには、REMOVE_SQLSET_REFERENCEプロシージャ
を使用します。
variable rid number; EXEC :rid := DBMS_SQLTUNE.ADD_SQLSET_REFERENCE( - sqlset_name => 'my_workload', - description => 'my sts reference');
ビューUSER/DBA_SQLSET_REFERENCES
を使用すると、特定のSQLチューニング・セットに関するすべての参照を確認できます。
このプロシージャは、既存のSQLプロファイル・オブジェクトの特定の属性を変更します。次の属性を変更できます(これらの属性名を使用)。
"STATUS
"を"ENABLED
"または"DISABLED
"に設定できます。
"NAME
"を有効な名前にリセットできます。この名前は、有効なOracle識別子であり一意である必要があります。
"DESCRIPTION
"を500文字以下の文字列に設定できます。
"CATEGORY
"を有効なカテゴリ名にリセットできます。この名前は有効なOracle識別子であり、正規化されたSQLテキストと組み合せた場合は一意である必要があります。
構文
DBMS_SQLTUNE.ALTER_SQL_PROFILE ( name IN VARCHAR2, attribute_name IN VARCHAR2, value IN VARCHAR2);
パラメータ
表125-9 ALTER_SQL_PROFILEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
変更する既存のSQLプロファイルの名前(必須)。 |
|
有効な属性名を使用して変更する属性の名前(必須)。大文字と小文字は区別されません。 |
|
有効な属性値を使用した新しい属性の値(必須)。 |
使用上の注意
"ALTER
ANY
SQL PROFILE
"権限が必要です。
例
-- Disable a profile, so it will be not be used by any sessions. EXEC DBMS_SQLTUNE.ALTER_SQL_PROFILE (name => :pname, - attribute_name => 'STATUS', - value => 'DISABLED'); -- Enable it back: EXEC DBMS_SQLTUNE.ALTER_SQL_PROFILE ( name => :pname, - attribute_name => 'STATUS', - value => 'ENABLED'); -- Change the category of the profile so it will be used only by sessions -- with category set to TEST. -- Use ALTER SESSION SET SQLTUNE_CATEGORY = 'TEST' to see how this profile -- behaves. EXEC DBMS_SQLTUNE.ALTER_SQL_PROFILE ( name => :pname, - attribute_name => 'CATEGORY', - value => 'TEST'); -- Change it back: EXEC DBMS_SQLTUNE.ALTER_SQL_PROFILE ( name => :pname, - attribute_name => 'CATEGORY', - value => 'DEFAULT');
このプロシージャは、現在実行中のチューニング・タスクを取り消します。すべての中間結果データは削除されます。
構文
DBMS_SQLTUNE.CANCEL_TUNING_TASK( task_name IN VARCHAR2);
パラメータ
例
タスクの取消しは、タスクの実行を停止し、実行済結果の確認が不要な場合に行います。
EXEC DBMS_SQLTUNE.CANCEL_TUNING_TASK(:my_task);
このプロシージャは、指定した期間、カーソル・キャッシュからワークロードを増分取得して、SQLチューニング・セットに入れます。このプロシージャは、カーソル・キャッシュからワークロードを取得してSQLチューニング・セットに入れ、特定の期間キャッシュを複数回ポーリングして、格納したワークロード・データを更新します。必要な期間実行して、システム・ワークロード全体を取得できます。
構文
DBMS_SQLTUNE.CAPTURE_CURSOR_CACHE_SQLSET ( sqlset_name IN VARCHAR2, time_limit IN POSITIVE := 1800, repeat_interval IN POSITIVE := 300, capture_option IN VARCHAR2 := 'MERGE', capture_mode IN NUMBER := MODE_REPLACE_OLD_STATS, basic_filter IN VARCHAR2 := NULL, sqlset_owner IN VARCHAR2 := NULL);
パラメータ
表125-11 CAPTURE_CURSOR_CACHE_SQLSETプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
SQLチューニング・セットの名前。 |
|
実行する合計時間(秒)。 |
|
サンプリングの実行間隔(秒)。 |
|
取得時の動作(新しい文の挿入、既存の文の更新またはその両方)。 |
|
取得モード(
|
|
各サンプリングでカーソル・キャッシュに適用するフィルタ(「 |
|
SQLチューニング・セットの所有者。現行のスキーマ所有者の場合は |
例
次の例では、30秒間にわたって取得が実行され、キャッシュが5秒に1回ポーリングされます。これによって、その時間内に実行されたすべての文が取得されます(その時間帯の前後は含まれません)。同じ文が重複して使用された場合は、格納されている文が新しい文に置換されます。
本番システムでの制限時間および繰返し間隔は、この例よりかなり大きく設定されることに注意してください。 time_limit
パラメータおよびrepeat_interval
パラメータは、使用するシステムでのワークロード時間およびカーソル・キャッシュの回転率プロパティに基づいて調整する必要があります。
EXEC DBMS_SQLTUNE.CAPTURE_CURSOR_CACHE_SQLSET( - sqlset_name => 'my_workload', - time_limit => 30, - repeat_interval => 5);
次のコールでは、実行中に実行統計が累積されます。このオプションでは、期限切れにまたがる場合でも、各カーソルの累積アクティビティの正確な状況が示されます。ただし、前述の例よりもコストが大きくなります。
EXEC DBMS_SQLTUNE.CAPTURE_CURSOR_CACHE_SQLSET( - sqlset_name => 'my_workload', - time_limit => 30, - repeat_interval => 5, - capture_mode => dbms_sqltune.MODE_ACCUMULATE_STATS);
次のコールでは、非常に低いコストで取得が実行されます。このコールでは、新しい文が挿入されるのみで、それらの文がSQLチューニング・セットに挿入された後、統計は更新されません。
EXEC DBMS_SQLTUNE.CAPTURE_CURSOR_CACHE_SQLSET( - sqlset_name => 'my_workload', - time_limit => 30, - repeat_interval => 5, - capture_option => 'INSERT');
このプロシージャは、データベース内にSQLチューニング・セット・オブジェクトを作成します。
このファンクションを実行すると、システムによってSQLチューニング・セットの名前が生成されます。
構文
DBMS_SQLTUNE.CREATE_SQLSET ( sqlset_name IN VARCHAR2, description IN VARCHAR2 := NULL sqlset_owner IN VARCHAR2 := NULL);
DBMS_SQLTUNE.CREATE_SQLSET ( sqlset_name IN VARCHAR2 := NULL, description IN VARCHAR2 := NULL, sqlset_owner IN VARCHAR2 := NULL) RETURN VARCHAR2;
パラメータ
表125-12 CREATE_SQLSETプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
SQLチューニング・セットの名前。 |
|
SQLチューニング・セットの説明。 |
|
SQLチューニング・セットの所有者。現行のスキーマ所有者の場合は |
例
EXEC DBMS_SQLTUNE.CREATE_SQLSET(- sqlset_name => 'my_workload', - description => 'complete application workload');
このプロシージャは、システム間でのSQLプロファイルのコピーに使用するステージング表を作成します。
構文
DBMS_SQLTUNE.CREATE_STGTAB_SQLPROF ( table_name IN VARCHAR2, schema_name IN VARCHAR2 := NULL, tablespace_name IN VARCHAR2 := NULL);
パラメータ
表125-13 CREATE_STGTAB_SQLPROFプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
作成する表の名前(二重引用符で囲まれていないかぎり、大/小文字区別なし)。必須です。 |
|
作成する表を格納するスキーマ(二重引用符で囲まれていないかぎり、大/小文字区別なし)。現行のスキーマの場合は |
|
ステージング表を格納する表領域(二重引用符で囲まれていないかぎり、大/小文字区別なし)。現行のユーザーのデフォルト表領域の場合は |
使用上の注意
このプロシージャは、PACK_STGTAB_SQLPROFプロシージャへのコールを発行する前に、1回コールします。
別のステージング表に別のSQLプロファイルを作成する場合は、複数回コールできます。
これは、DDL操作であるため、トランザクション内では実行されないことに注意してください。
例
別のシステムに移動可能なプロファイル・データを格納するステージング表を作成します。
EXEC DBMS_SQLTUNE.CREATE_STGTAB_SQLPROF (table_name => 'PROFILE_STGTAB');
このプロシージャは、SQLチューニング・セットのインポートおよびエクスポートに使用するステージング表を作成します。
構文
DBMS_SQLTUNE.CREATE_STGTAB_SQLSET ( table_name IN VARCHAR2, schema_name IN VARCHAR2 := NULL, tablespace_name IN VARCHAR2 := NULL);
パラメータ
表125-14 CREATE_STGTAB_SQLSETプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
作成する表の名前(大/小文字区別)。 |
|
作成する表を格納するスキーマ(大/小文字区別)。現行のスキーマの場合は |
|
ステージング表を格納する表領域(大/小文字区別)。現行ユーザーのデフォルト表領域の場合は |
使用上の注意
このプロシージャは、PACK_STGTAB_SQLSETプロシージャへのコールを発行する前に、1回コールします。
別のステージング表に別のSQLチューニング・セットを作成する場合は、複数回コールできます。
これは、DDL操作であるため、トランザクション内では実行されないことに注意してください。
このコールを発行するユーザーには、指定するスキーマおよび関連する表領域でのCREATE
TABLE
権限が必要です。
ステージング表にはネストした表の列および索引が含まれているため、ステージング表の名前は変更しないでください。
例
SQLチューニング・セットをパックし最終的にはエクスポートするためのステージング表を作成します。
EXEC DBMS_SQLTUNE.CREATE_STGTAB_SQLSET(table_name => 'STGTAB_SQLSET');
このファンクションを様々な形式で使用して次の操作ができます。
テキストを指定して、単一の文に対するチューニング・タスクを作成する。
識別子を指定して、カーソル・キャッシュ内の単一の文に対するチューニング・タスクを作成する。
スナップショット識別子の範囲を指定して、ワークロード・リポジトリ内の単一文に対するチューニング・タスクを作成する。
SQLチューニング・セットに対するチューニング・タスクを作成する。
すべての場合において、ファンクションは、主にアドバイザ・タスクの作成とそのパラメータの設定を行います。
構文
SQLテキスト形式:
DBMS_SQLTUNE.CREATE_TUNING_TASK( sql_text IN CLOB, bind_list IN sql_binds := NULL, user_name IN VARCHAR2 := NULL, scope IN VARCHAR2 := SCOPE_COMPREHENSIVE, time_limit IN NUMBER := TIME_LIMIT_DEFAULT, task_name IN VARCHAR2 := NULL, description IN VARCHAR2 := NULL) RETURN VARCHAR2;
SQL ID形式:
DBMS_SQLTUNE.CREATE_TUNING_TASK( sql_id IN VARCHAR2, plan_hash_value IN NUMBER := NULL, scope IN VARCHAR2 := SCOPE_COMPREHENSIVE, time_limit IN NUMBER := TIME_LIMIT_DEFAULT, task_name IN VARCHAR2 := NULL, description IN VARCHAR2 := NULL) RETURN VARCHAR2;
ワークロード・リポジトリ形式:
DBMS_SQLTUNE.CREATE_TUNING_TASK( begin_snap IN NUMBER, end_snap IN NUMBER, sql_id IN VARCHAR2, plan_hash_value IN NUMBER := NULL, scope IN VARCHAR2 := SCOPE_COMPREHENSIVE, time_limit IN NUMBER := TIME_LIMIT_DEFAULT, task_name IN VARCHAR2 := NULL, description IN VARCHAR2 := NULL) RETURN VARCHAR2;
SQLSET形式:
DBMS_SQLTUNE.CREATE_TUNING_TASK( sqlset_name IN VARCHAR2, basic_filter IN VARCHAR2 := NULL, object_filter IN VARCHAR2 := NULL, rank1 IN VARCHAR2 := NULL, rank2 IN VARCHAR2 := NULL, rank3 IN VARCHAR2 := NULL, result_percentage IN NUMBER := NULL, result_limit IN NUMBER := NULL, scope IN VARCHAR2 := SCOPE_COMPREHENSIVE, time_limit IN NUMBER := TIME_LIMIT_DEFAULT, task_name IN VARCHAR2 := NULL, description IN VARCHAR2 := NULL plan_filter IN VARCHAR2 := 'MAX_ELAPSED_TIME', sqlset_owner IN VARCHAR2 := NULL) RETURN VARCHAR2;
パラメータ
表125-15 CREATE_TUNING_TASKファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
SQL文のテキスト。 |
|
スナップショット識別子を開始します。 |
|
スナップショット識別子を終了します。 |
|
SQL文の識別子。 |
|
ANYDATAタイプのバインド値の順序付けられたリスト。 |
|
SQL実行計画のハッシュ値。 |
|
SQLチューニング・セットの名前。 |
|
SQLチューニング・セットからSQLをフィルタするためのSQL述語。 |
|
オブジェクト・フィルタ。 |
|
選択したSQLのorder-by句。 |
|
ランキング・メジャーの合計のパーセント。 |
|
フィルタ処理またはランク付けが済んでいるSQLの先頭から数件取得されるSQL文。 |
|
チューニング対象のSQL文があるユーザーの名前。 |
|
チューニング・スコープ(制限付き/包括的)。 |
|
チューニング・セッションの最大継続時間(秒)。 |
|
チューニング・タスク名(オプション)。 |
|
SQLチューニング・セッションの説明(最大256文字)。 |
|
計画フィルタ。 同じ文に関連付けられている計画(
|
|
SQLチューニング・セットの所有者。現行のスキーマ所有者の場合は |
戻り値
ユーザーごとに一意のSQLチューニング・タスク名(2人の異なるユーザーが自分のアドバイザ・タスクに同じ名前を付けることはできます)。
使用上の注意
SQLチューニング・セットを使用するこのサブプログラムの形式に関して、このファンクションで提供されるフィルタは、現行のユーザーが実行するSQLの一部として評価されます。したがって、それらのフィルタは、ユーザーのセキュリティ権限で実行され、ユーザーがアクセスできるすべての構成メンバーおよび副問合せを含んでいますが、それ以外のものは含んでいません。
例
variable stmt_task VARCHAR2(64); variable sts_task VARCHAR2(64); -- Sql text format EXEC :stmt_task := DBMS_SQLTUNE.CREATE_TUNING_TASK( - sql_text => 'select quantity_sold from sales s, times t where s.time_id = t.time_id and s.time_id = TO_DATE(''24-NOV-00'')'); -- Sql id format (cursor cache) EXEC :stmt_task := DBMS_SQLTUNE.CREATE_TUNING_TASK(sql_id => 'ay1m3ssvtrh24'); -- tune in limited scope EXEC :stmt_task := DBMS_SQLTUNE.CREATE_TUNING_TASK(sql_id => 'ay1m3ssvtrh24', - scope => 'LIMITED'); -- only give 10 minutes for tuning statement EXEC :stmt_task := DBMS_SQLTUNE.CREATE_TUNING_TASK(sql_id => 'ay1m3ssvtrh24', - time_limit => 600); -- Workload repository format exec :stmt_task := DBMS_SQLTUNE.CREATE_TUNING_TASK(begin_snap => 1, - end_snap => 2, sql_id => 'ay1m3ssvtrh24'); -- Sql tuning set format (first we need to load an STS, then tune it) -- Tune our statements in order by buffer gets, time limit of one hour -- the default ranking measure is elapsed time. EXEC :sts_task := DBMS_SQLTUNE.CREATE_TUNING_TASK( - sqlset_name => 'my_workload', - rank1 => 'BUFFER_GETS', - time_limit => 3600, - description => 'tune my workload ordered by buffer gets');
このプロシージャは、SQL文のセットをSQLチューニング・セットから削除します。
構文
DBMS_SQLTUNE.DELETE_SQLSET ( sqlset_name IN VARCHAR2, basic_filter IN VARCHAR2 := NULL, sqlset_owner IN VARCHAR2 := NULL);
パラメータ
表125-16 DELETE_SQLSETプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
SQLチューニング・セットの名前。 |
|
SQLチューニング・セットからSQLをフィルタするためのSQL述語。この基本フィルタはSQLチューニング・セットのコンテンツ上でwhere句として使用され、目的のSQLのサブセットをチューニング・セットから選択します。 |
|
SQLチューニング・セットの所有者。現行のスキーマ所有者の場合は |
例
-- Delete all statements in a sql tuning set. EXEC DBMS_SQLTUNE.DELETE_SQLSET(sqlset_name => 'my_workload'); -- Delete all statements in a sql tuning set which ran for less than a second EXEC DBMS_SQLTUNE.DELETE_SQLSET(sqlset_name => 'my_workload', - basic_filter => 'elapsed_time < 1000000');
このプロシージャは、データベースから名前付きSQLプロファイルを削除します。
構文
DBMS_SQLTUNE.DROP_SQL_PROFILE ( name IN VARCHAR2, ignore IN BOOLEAN := FALSE);
パラメータ
表125-17 DROP_SQL_PROFILEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
削除するSQLプロファイルの名前(必須)。大文字と小文字が区別されます。 |
|
オブジェクトが存在しないために起こるエラーは無視されます。 |
使用上の注意
"DROP
ANY
SQL PROFILE
"権限が必要です。
例
-- Drop the profile: EXEC DBMS_SQLTUNE.DROP_SQL_PROFILE(:pname);
このプロシージャは、SQLチューニング・セットがアクティブでない場合はそれを削除します。
構文
DBMS_SQLTUNE.DROP_SQLSET ( sqlset_name IN VARCHAR2, sqlset_owner IN VARCHAR2 := NULL);
パラメータ
表125-18 DROP_SQLSETプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
SQLチューニング・セットの名前。 |
|
SQLチューニング・セットの所有者。現行のスキーマ所有者の場合は |
使用上の注意
SQLチューニング・セットは、1つ以上のクライアントが参照している場合は削除できません。
例
-- Drop the sqlset. EXEC DBMS_SQLTUNE.DROP_SQLSET ('my_workload');
このプロシージャは、SQLチューニング・タスクを削除します。タスクとそのすべての結果データは削除されます。
構文
DBMS_SQLTUNE.DROP_TUNING_TASK( task_name IN VARCHAR2);
パラメータ
このファンクションおよびプロシージャは、以前に作成したチューニング・タスクを実行します。ファンクションとプロシージャの両方とも、新しいタスク実行のコンテキストで実行されます。ファンクションのバージョンは新しい実行名を戻す点が異なります。
構文
DBMS_SQLTUNE.EXECUTE_TUNING_TASK( task_name IN VARCHAR2, execution_name IN VARCHAR2 := NULL, execution_params IN dbms_advisor.argList := NULL, execution_desc IN VARCHAR2 := NULL) RETURN VARCHAR2;
DBMS_SQLTUNE.EXECUTE_TUNING_TASK( task_name IN VARCHAR2, execution_name IN VARCHAR2 := NULL, execution_params IN dbms_advisor.argList := NULL, execution_desc IN VARCHAR2 := NULL);
パラメータ
表125-20 EXECUTE_TUNING_TASKファンクションおよびプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
実行するチューニング・タスクの名前。 |
execution_name |
実行を修飾して識別するための名前。指定されていない場合は、アドバイザによって生成され、ファンクションによって戻されます。 |
execution_params |
指定した実行のパラメータ(名前、値)のリスト。実行パラメータは、指定した実行に対してのみ影響します。 これらのパラメータは、(SET_TUNING_TASK_PARAMETERプロシージャを使用して設定された)タスクに格納されているパラメータの値より優先されます。 |
|
実行について説明する256文字の長さの文字列。 |
使用上の注意
チューニング・タスクは、リセットせずに複数回実行できます。
例
EXEC DBMS_SQLTUNE.EXECUTE_TUNING_TASK(:stmt_task);
このプロシージャは、SQLチューニング・アドバイザによる一連のSQLプロファイル・リコメンデーションを実装します。 このサブプログラムをコールすることは、SCRIPT_TUNING_TASKファンクションをコールしてからスクリプトを実行することと同じです。
構文
DBMS_SQLTUNE.IMPLEMENT_TUNING_TASK( task_name IN VARCHAR2, rec_type IN VARCHAR2 := REC_TYPE_SQL_PROFILES, owner_name IN VARCHAR2 := NULL, execution_name IN VARCHAR2 := NULL);
パラメータ
表125-21 IMPLEMENT_TUNING_TASKプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
リコメンデーションを実装するチューニング・タスクの名前。 |
rec_type |
実装するリコメンデーションのタイプをフィルタします。現在は' |
|
関連するチューニング・タスクの所有者。現行のユーザーの場合は |
|
使用するタスク実行の名前。 |
このプロシージャは、現在実行中のチューニング・タスクを中断します。このタスクは、通常の終了と同様に操作を終了するため、ユーザーは中間結果にアクセスできます。
構文
DBMS_SQLTUNE.INTERRUPT_TUNING_TASK( task_name IN VARCHAR2);
パラメータ
例
EXEC DBMS_SQLTUNE.INTERRUPT_TUNING_TASK(:my_task);
このプロシージャは、選択したSQLのセットをSQLチューニング・セットに入力します。このプロシージャを複数回コールすると、新しいSQL文の追加または既存の文の属性の置換を行うことができます。
構文
DBMS_SQLTUNE.LOAD_SQLSET ( sqlset_name IN VARCHAR2, populate_cursor IN sqlset_cursor, load_option IN VARCHAR2 := 'INSERT', update_option IN VARCHAR2 := 'REPLACE', update_condition IN VARCHAR2 := NULL, update_attributes IN VARCHAR2 := NULL, ignore_null IN BOOLEAN := TRUE, commit_rows IN POSITIVE := NULL, sqlset_owner IN VARCHAR2 := NULL);
パラメータ
表125-23 LOAD_SQLSETプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
入力先のSQLチューニング・セットの名前。 |
|
入力に使用するカーソル参照。 |
|
SQLチューニング・セットへの文のロード方法を指定します。有効な値は、次のとおりです。
|
|
既存の文の更新方法を指定します。 このパラメータは、load_optionのオプションが'
|
|
更新操作を実行するwhere句を指定します。更新操作は、指定条件がTRUEの場合にのみ実行されます。条件によって、データのソースまたは宛先のいずれかを参照できます。条件では、次の接頭辞を使用してソースまたは宛先の属性を参照する必要があります。
|
|
マージ操作時または更新操作時に更新するSQL文の属性のリストを指定します。有効な値は、次のとおりです。
|
|
|
|
数値を指定すると、その数の文が挿入されるたびにロードがコミットされます。 |
|
SQLチューニング・セットの所有者または現行のスキーマ所有者。現行の所有者の場合は |
例外
sqlset_name
が無効の場合、対応するSQLチューニング・セットが存在しない場合、またはpopulate_cursor
が正しくないために実行できない場合、このプロシージャはエラーを戻します。
指定したフィルタが無効な場合も例外が発生します。 フィルタは、解析できない場合(sqlset_rowに存在しない属性を参照している場合など)またはユーザーの権限に違反している場合に無効になる可能性があります。
使用上の注意
入力populate_cursor
の行は、SQLSET_ROW
タイプである必要があります。
例
この例では、SQLチューニング・セットを作成し、そのチューニング・セットに経過時間が5秒以上のすべてのカーソル・キャッシュ文を入力します。ただし、(アプリケーション・ユーザー・ワークロードをシミュレートするための)SYS
スキーマに属する文は除きます。SQL文のすべての属性を選択して、デフォルト・モードでチューニング・セットにロードします。SQLチューニング・セットは空であるため、このデフォルト・モードには新しい文のみがロードされます。
-- create the tuning set EXEC DBMS_SQLTUNE.CREATE_SQLSET('my_workload'); -- populate the tuning set from the cursor cache DECLARE cur DBMS_SQLTUNE.SQLSET_CURSOR; BEGIN OPEN cur FOR SELECT VALUE(P) FROM table( DBMS_SQLTUNE.SELECT_CURSOR_CACHE( 'parsing_schema_name <> ''SYS'' AND elapsed_time > 5000000', NULL, NULL, NULL, NULL, 1, NULL, 'ALL')) P; DBMS_SQLTUNE.LOAD_SQLSET(sqlset_name => 'my_workload', populate_cursor => cur); END; /
ここで、ワークロード・リポジトリ(AWR)に格納されている内容でこの情報を増補するとします。 現在キャッシュに入っているカーソルは、スナップショットが取られたことで期限切れしているとみなされるため、チューニング・セットにupdate_option
として'ACCUMULATE'
を入力します。
AWRで取得されるすべての文が重要とみなされるため、elapsed_time
フィルタは省略します。ただし、再帰的SQLを回避するために、SYS
解析のカーソルは破棄します。
DECLARE cur DBMS_SQLTUNE.SQLSET_CURSOR; BEGIN OPEN cur FOR SELECT VALUE(P) FROM table( DBMS_SQLTUNE.SELECT_WORKLOAD_REPOSITORY(1,2, 'parsing_schema_name <> ''SYS''', NULL, NULL,NULL,NULL, 1, NULL, 'ALL')) P; DBMS_SQLTUNE.LOAD_SQLSET(sqlset_name => 'my_workload', populate_cursor => cur, Using DBMS_SQLTUNE load_option => 'MERGE', update_option => 'ACCUMULATE'); END;
次の例は、新しい文のみをワークロード・リポジトリから挿入し、SQLチューニング・セットにすでに存在する文はスキップする単純なロード操作です。 LOAD_SQLSET
プロシージャのload_option
引数のデフォルト値は'INSERT'
であることに注意してください。
DECLARE cur sys_refcursor; BEGIN OPEN cur FOR SELECT VALUE(P) FROM table(DBMS_SQLTUNE.SELECT_WORKLOAD_REPOSITORY(1,2)) P; DBMS_SQLTUNE.LOAD_SQLSET(sqlset_name => 'my_workload', populate_cursor => cur); END; /
次の例は、UPDATE
オプションを指定したロード操作を示します。これによって、SQLチューニング・セットにすでに存在する文は更新されますが、新しい文は追加されません。デフォルトでは、古い統計が新しい値に置き換えられます。
DECLARE cur sys_refcursor; BEGIN OPEN cur FOR SELECT VALUE(P) FROM table(DBMS_SQLTUNE.SELECT_CURSOR_CACHE) P; DBMS_SQLTUNE.LOAD_SQLSET(sqlset_name => 'my_workload', populate_cursor => cur, load_option => 'UPDATE'); END; /
このプロシージャは、SYS
スキーマからステージング表にプロファイル・データをコピーします。
構文
DBMS_SQLTUNE.PACK_STGTAB_SQLPROF ( profile_name IN VARCHAR2 := '%', profile_category IN VARCHAR2 := 'DEFAULT', staging_table_name IN VARCHAR2, staging_schema_owner IN VARCHAR2 := NULL);
パラメータ
表125-24 PACK_STGTAB_SQLPROFプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
パックするプロファイルの名前(%ワイルドカードを使用可、大/小文字区別)。 |
|
パックするプロファイルのカテゴリ(%ワイルドカードを使用可、大/小文字区別)。 |
|
使用する表の名前(二重引用符で囲まれていないかぎり、大/小文字区別なし)。必須です。 |
|
表が存在するスキーマ(二重引用符で囲まれていないかぎり、大/小文字区別なし)。現行のスキーマの場合は |
使用上の注意
このプロシージャを実行するには、ステージング表に対するADMINISTER SQL MANAGEMENT OBJECT
権限およびINSERT
権限が必要です。
このプロシージャは、各SQLプロファイルをパックした後にCOMMIT
を発行するため、実行中にエラーが発生した場合は、ステージング表の行を削除して、ステージング表を消去してください。
例
DEFAULT
カテゴリ内のプロファイルのみをステージング表に入れます。これは、このシステム上でデフォルトで使用されるすべてのプロファイルに該当します。
EXEC DBMS_SQLTUNE.PACK_STGTAB_SQLPROF (staging_table_name => 'PROFILE_STGTAB');
次の例でも、すべてのプロファイルがステージング表に入れられます。この例では、現在デフォルトで使用されていない、別のカテゴリ内のプロファイルも(テストなどのために)移動されることに注意してください。
EXEC DBMS_SQLTUNE.PACK_STGTAB_SQLPROF (profile_category => '%', - staging_table_name => 'PROFILE_STGTAB');
このプロシージャは、1つ以上のSQLチューニング・セットを、SYS
スキーマ内のそれぞれの場所からCREATE_STGTAB_SQLSETプロシージャによって作成されたステージング表にコピーします。
構文
DBMS_SQLTUNE.PACK_STGTAB_SQLSET ( sqlset_name IN VARCHAR2, sqlset_owner IN VARCHAR2 := NULL, staging_table_name IN VARCHAR2, staging_schema_owner IN VARCHAR2 := NULL);
パラメータ
表125-25 PACK_STGTAB_SQLSETプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
パックするSQLチューニング・セットの名前(%ワイルドカードを使用可、大/小文字区別)。 |
|
パックするSQLチューニング・セットのカテゴリ(%ワイルドカードを使用可、大/小文字区別)。 |
|
使用する表の名前(大/小文字区別)。 |
|
表が存在するスキーマ(大/小文字区別)。現行のスキーマの場合は |
使用上の注意
このプロシージャを複数回コールすると、複数のSQLチューニング・セットを移動できます。これによって、ユーザーは、入力済のステージング表を別のシステムに任意の方法(データベース・リンク、データポンプなど)で移動できます。 その後、UNPACK_STGTAB_SQLSETプロシージャをコールして、そのシステムにSQLチューニング・セットを作成できます。
このプロシージャは、各SQLチューニング・セットをパックした後にCOMMIT
を発行するため、実行中にエラーが発生した場合は、ステージング表の行を削除して、ステージング表を消去してください。
例
システム上のすべてのSQLチューニング・セットをステージング表に入れます(ステージング表の作成方法については、CREATE_STGTAB_SQLSETプロシージャ
を参照)。
EXEC DBMS_SQLTUNE.PACK_STGTAB_SQLSET(sqlset_name => '%', - sqlset_owner => '%', - staging_table_name => 'STGTAB_SQLSET');
現行のユーザーが所有するSQLチューニング・セットのみをステージング表に入れます。
EXEC DBMS_SQLTUNE.PACK_STGTAB_SQLSET(sqlset_name => '%', - staging_table_name => 'STGTAB_SQLSET');
特定のSQLチューニング・セットをパックします。
EXEC DBMS_SQLTUNE.PACK_STGTAB_SQLSET(sqlset_name => 'my_workload', - staging_table_name => 'STGTAB_SQLSET');
2つ目のSQLチューニング・セットをパックします。
EXEC DBMS_SQLTUNE.PACK_STGTAB_SQLSET(sqlset_name => 'workload_subset', - staging_table_name => 'STGTAB_SQLSET');
このプロシージャを使用すると、DBAは、ステージング表に保存されているプロファイル・データの値を、アンパック操作を実行する前に変更できます。このプロシージャは、プロファイルのカテゴリを変更するために使用できます。また、同じ名前のプロファイルがシステム上にある場合、プロファイルの名前を変更するために使用することもできます。
構文
DBMS_SQLTUNE.REMAP_STGTAB_SQLPROF ( old_profile_name IN VARCHAR2, new_profile_name IN VARCHAR2 := NULL, new_profile_category IN VARCHAR2 := NULL, staging_table_name IN VARCHAR2, staging_schema_owner IN VARCHAR2 := NULL);
パラメータ
表125-26 REMAP_STGTAB_SQLPROFプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
再マップ操作の対象となるプロファイルの名前(大/小文字区別)。 |
|
プロファイルの新しい名前(大/小文字区別)。変更しない場合は |
|
プロファイルの新しいカテゴリ(大/小文字区別)。変更しない場合は |
|
再マップ操作を行う表の名前(大/小文字区別)。必須です。 |
|
表が存在するスキーマ(大/小文字区別)。現行のスキーマの場合は |
使用上の注意
このプロシージャを使用するには、ステージング表に対するUPDATE
権限が必要です。
例
アンパックする前にプロファイルの名前を変更して、競合を回避します。
EXEC DBMS_SQLTUNE.REMAP_STGTAB_SQLPROF(old_profile_name => :pname, - new_profile_name => 'IMP' || :pname, - staging_table_name => 'PROFILE_STGTAB');
ステージング表のSQLプロファイルをインポートする前に、そのプロファイルのカテゴリを'TEST'
に変更します。これによって、ユーザーは、プロファイルを新しいシステムでアクティブにする前にテストを行うことができます。
EXEC DBMS_SQLTUNE.REMAP_STGTAB_SQLPROF(old_profile_name => :pname, - new_profile_category => 'TEST', - staging_table_name => 'PROFILE_STGTAB');
このプロシージャは、ホスト・システム上とは異なる値でアンパックできるように、ステージング表内のチューニング・セットの名前および所有者を変更します。
構文
DBMS_SQLTUNE.REMAP_STGTAB_SQLSET ( old_sqlset_name IN VARCHAR2, old_sqlset_owner IN VARCHAR2 := NULL, new_sqlset_name IN VARCHAR2 := NULL, new_sqlset_owner IN VARCHAR2 := NULL, staging_table_name IN VARCHAR2, taging_schema_owner IN VARCHAR2 := NULL);
パラメータ
表125-27 REMAP_STGTAB_SQLSETプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
再マップ操作の対象となるチューニング・セットの名前。ワイルドカードはサポートされていません。 |
|
再マップ操作の対象となるチューニング・セット所有者の名前。現行のスキーマ所有者の場合は |
|
チューニング・セットの新しい名前。チューニング・セット名を変更しない場合は |
|
チューニング・セットの新しい所有者。所有者を変更しない場合は |
|
再マップ操作を行う表の名前(大/小文字区別)。 |
|
ステージング表の所有者の名前(大/小文字区別)。現行のスキーマ所有者の場合は |
使用上の注意
このプロシージャを複数回コールすると、複数のチューニング・セットの名前または所有者を再マップできます。このプロシージャで処理できるチューニング・セットは、1回のコールで1つのみであることに注意してください。
例
-- Change the name of an STS in the staging table before we unpack it. EXEC DBMS_SQLTUNE.REMAP_STGTAB_SQLSET(old_sqlset_name => 'my_workload', - old_sqlset_owner => 'SH', - new_sqlset_name => 'imp_workload', - staging_table_name => 'STGTAB_SQLSET'); -- Change the owner of an STS in the staging table before we unpack it. EXEC DBMS_SQLTUNE.REMAP_STGTAB_SQLSET(old_sqlset_name => 'imp_workload', - old_sqlset_owner => 'SH', - new_sqlset_owner => 'SYS', - staging_table_name => 'STGTAB_SQLSET');
このプロシージャは、SQLチューニング・セットを非アクティブ化し、このSQLチューニング・セットをクライアントが使用していないことを示します。
構文
DBMS_SQLTUNE.REMOVE_SQLSET_REFERENCE ( sqlset_name IN VARCHAR2, reference_id IN NUMBER);
パラメータ
表125-28 REMOVE_SQLSET_REFERENCEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
SQLチューニング・セットの名前。 |
|
削除する参照の識別子。 |
例
特定のSQLチューニング・セットの使用を終了した後、そのSQLチューニング・セットに関する参照を削除して、再度書込み可能にすることができます。
EXEC DBMS_SQLTUNE.REMOVE_SQLSET_REFERENCE( - sqlset_name => 'my_workload', - reference_id => :rid);
特定のSQLチューニング・セットに関するすべての参照を確認するには、ビューUSER/DBA_SQLSET_REFERENCES
を使用します。
このファンクションは、自動チューニング・タスクによるレポートを表示します。 このファンクションは、特定の範囲のサブタスクをレポートするREPORT_AUTO_TUNING_TASKファンクションとは異なります。
構文
DBMS_SQLTUNE.REPORT_AUTO_TUNING_TASK( begin_exec IN VARCHAR2 := NULL, end_exec IN VARCHAR2 := NULL, type IN VARCHAR2 := TYPE_TEXT, level IN VARCHAR2 := LEVEL_TYPICAL, section IN VARCHAR2 := SECTION_ALL, object_id IN NUMBER := NULL, result_limit IN NUMBER := NULL, segment_scheme IN VARCHAR2 := SEGMENT_NONE) RETURN CLOB;
パラメータ
表125-29 REPORT_AUTO_TUNING_TASKファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
レポートを開始する実行の名前。 |
|
レポートを終了する実行の名前。 |
|
作成するレポートのタイプ。 設定可能な値は、テキストのレポートを作成する |
|
レポートの詳細なレベル。
|
|
オプションで、レポートを単一のセクションに制限できます(すべてのセクションに関するレポートの場合は、
|
|
レポートの制限対象となる単一の文を表すアドバイザ・フレームワーク・オブジェクトのID。すべての文を表す場合は、 |
|
レポートに表示されるSQL文の最大数。 |
|
現在は実行できません。 |
戻り値
必要なレポートが含まれているCLOB
。
このファンクションは、SQL文の実行に関連して収集された監視情報を示すレポートを(テキスト、HTMLまたはXML形式で)作成します。このファンクションは利便性のために提供されています。このレポートの構造または内容は今後のリリースで変更される可能性があります。
構文
DBMS_SQLTUNE.REPORT_SQL_MONITORK( sql_id IN VARCHAR2 := NULL, session_id IN NUMBER := NULL, session_serial IN NUMBER := NULL, sql_exec_start IN DATE := NULL, sql_exec_id IN NUMBER := NULL, inst_id IN NUMBER := -1, start_time_filter IN DATE := NULL, end_time_filter IN DATE := NULL, instance_id_filter IN NUMBER := NULL, parallel_filter IN VARCHAR2 := NULL, event_detail IN VARCHAR2 := 'YES', report_level IN VARCHAR2 := 'TYPICAL', type IN VARCHAR2 := 'TEXT') RETURN CLOB;
パラメータ
表125-30 REPORT_SQL_MONITORファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
監視情報を表示する対象のSQL_ID。Oracleによって監視される最後の文をレポートする場合は、 |
|
|
|
|
|
このパラメータは、 |
|
このパラメータは、 |
|
指定したインスタンスで開始された文のみを対象とします。ログイン・インスタンスを対象とする場合は、-1(デフォルト)を使用します。すべてのインスタンスを対象とする場合は、 |
|
|
|
|
|
複数のOracle Real Application Clusters(RAC)インスタンスにわたってパラレル実行が行われた場合にのみ適用されます。このパラメータを使用すると、指定したインスタンスのアクティビティのみをレポートできます。パラレル問合せが実行されたすべてのインスタンスに関するアクティビティを含めるには、 |
|
パラレル実行にのみ適用され、パラレル実行に関連する処理(問合せコーディネータまたはパラレル実行サーバー、あるいはその両方)のサブセットのみのアクティビティを報告できるようにします。このパラメータの値は、次のいずれかになります。
次の例では、パラレル処理のサブセットを対象とする方法を示します。
|
|
値が' |
|
レポートの詳細なレベル(' |
|
レポート形式。デフォルトは'TEXT'です。'TEXT'、'HTML'または'XML'を指定できます。 |
戻り値
必要なレポートが含まれているCLOB
。
使用上の注意
このレポートの対象となるSQL文の特徴を次に示します。
Oracleによって最後に監視されたSQL(これはデフォルトの動作であるため、パラメータを指定する必要はありません)。特定のセッションで実行され、Oracleによって監視された最後のSQLです。セッションは、セッションIDおよび場合によってはシリアル番号によって識別されます。 たとえば、現行のセッションにはsession_id
=>
USERENV('SID')
を使用し、セッションIDが20、シリアル番号が103のセッションにはsession_id
=>
20
, session_serial
=>
103
を使用します。特定の文の最後の実行は、sql_id
によって識別されます。特定のSQL文の実行は、その実行キー(sql_id
, sql_exec_start
およびsql_exec_id
)によって識別されます。
このレポートでは、次に示すいくつかの固定ビューで公開されるパフォーマンス・データが生成されます。 このため、レポート・ファンクションを起動するには、これらの固定ビューからデータを選択する権限(SELECT_CATALOG
ロールなど)が必要です。
GV$SQL_MONITOR
GV$SQL_PLAN_MONITOR
GV$SQL_PLAN
GV$ACTIVE_SESSION_HISTORY
GV$SESSION_LONGOPS
GV$SQL
関連項目: リアルタイムSQL監視の詳細は、『Oracle Databaseパフォーマンス・チューニング・ガイド』を参照してください。 |
このファンクションは、チューニング・タスクの結果を表示します。
構文
DBMS_SQLTUNE.REPORT_TUNING_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, result_limit IN NUMBER := NULL, owner_name IN VARCHAR2 := NULL, execution_name IN VARCHAR2 := NULL)) RETURN CLOB;
パラメータ
表125-31 REPORT_TUNING_TASKファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
レポートするチューニング・タスクの名前。 |
|
作成するレポートのタイプ。設定可能な値は、テキストのレポートを作成する |
|
レポートの詳細なレベル。
|
|
オプションで、レポートを単一のセクションに制限できます(すべてのセクションに関するレポートの場合は、
|
|
レポートの制限対象となる単一の文を表すアドバイザ・フレームワーク・オブジェクトのID。すべての文を表す場合は、 |
|
レポートに表示されるSQL文の最大数。 |
|
関連するチューニング・タスクの所有者。デフォルトは、現行のスキーマ所有者です。 |
|
使用するタスク実行の名前。 |
戻り値
必要なレポートが含まれているCLOB
。
例
-- Get the whole report for the single statement case. SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK(:stmt_task) from dual; -- Show me the summary for the sts case. SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK(:sts_task, 'TEXT', 'TYPICAL', 'SUMMARY') FROM DUAL; -- Show me the findings for the statement I'm interested in. SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK(:sts_task, 'TEXT', 'TYPICAL', 'FINDINGS', 5) from dual;
このプロシージャは、現在実行されていないチューニング・タスクに対してコールされ、そのチューニング・タスクを再実行できるように準備します。
構文
DBMS_SQLTUNE.RESET_TUNING_TASK( task_name IN VARCHAR2);
パラメータ
例
-- reset and re-execute a task EXEC DBMS_SQLTUNE.RESET_TUNING_TASK(:sts_task); -- re-execute the task EXEC DBMS_SQLTUNE.EXECUTE_TUNING_TASK(:sts_task);
このプロシージャは、SQLチューニング・セットを処理するために作成され、以前に中断されたタスクを再開します。
構文
DBMS_SQLTUNE.RESUME_TUNING_TASK( task_name IN VARCHAR2, basic_filter IN VARCHAR2 := NULL);
パラメータ
表125-33 RESUME_TUNING_TASKプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
再開するチューニング・タスクの名前。 |
|
SQLチューニング・セットからSQLをフィルタするためのSQL述語。 このフィルタは、CREATE_TUNING_TASKファンクションのコール時に、基本フィルタ(パラメータ |
使用上の注意
単一のSQLチューニング・タスク(SQLチューニング・セットではなく、1つのSQL文をチューニングするために作成されたタスク)の再開はサポートされていません。
例
-- Interrupt the task EXEC DBMS_SQLTUNE.INTERRUPT_TUNING_TASK(:conc_task); -- Once a task is interrupted, we can elect to reset it, resume it, or check -- out its results and then decide. For this example we will just resume. EXEC DBMS_SQLTUNE.RESUME_TUNING_TASK(:conc_task);
このファンクションは、SQL*PLUSスクリプトを作成します。その後、このスクリプトを実行すると、アドバイザによる一連のリコメンデーションを実装できます。
構文
DBMS_SQLTUNE.SCRIPT_TUNING_TASK( task_name IN VARCHAR2, rec_type IN VARCHAR2 := REC_TYPE_ALL, object_id IN NUMBER := NULL, result_limit IN NUMNBER := NULL, owner_name IN VARCHAR2 := NULL, execution_name IN VARCHAR2 := NULL) RETURN CLOB;
パラメータ
表125-34 SCRIPT_TUNING_TASKファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
スクリプトを適用するチューニング・タスクの名前。 |
|
対象とするリコメンデーションのタイプで、スクリプトをフィルタします。 |
|
1つのオブジェクトIDでフィルタします(オプション)。 |
|
上位N番(順序はobject_idで決定)のSQLのみに対するコマンドを示します(オプション)。object_idも指定されている場合は無視されます。 |
|
関連するチューニング・タスクの所有者。デフォルトは、現行のスキーマ所有者です。 |
|
使用するタスク実行の名前。 |
戻り値
CLOB
の形式でスクリプトを戻します。
使用上の注意
戻されたスクリプトは、DBAが確認した後で実行してください。
スクリプトをファイルに入れるには、DBMS_ADVISOR.CREATE_FILE
のコールでラップしてください。
例
SET LINESIZE 140 -- Get a script for all actions recommended by the task. SELECT DBMS_SQLTUNE.SCRIPT_TUNING_TASK(:stmt_task) FROM DUAL; -- Get a script of just the sql profiles we should create. SELECT DBMS_SQLTUNE.SCRIPT_TUNING_TASK(:stmt_task, 'PROFILES') FROM DUAL; -- get a script of just stale / missing stats SELECT DBMS_SQLTUNE.SCRIPT_TUNING_TASK(:stmt_task, 'STATISTICS') FROM DUAL; -- Get a script with recommendations about just one SQL statement when we have -- tuned an entire STS. SELECT DBMS_SQLTUNE.SCRIPT_TUNING_TASK(:sts_task, 'ALL', 5) FROM DUAL;
このファンクションは、SQLカーソル・キャッシュからSQL文を収集します。
構文
DBMS_SQLTUNE.SELECT_CURSOR_CACHE ( basic_filter IN VARCHAR2 := NULL, object_filter IN VARCHAR2 := NULL, ranking_measure1 IN VARCHAR2 := NULL, ranking_measure2 IN VARCHAR2 := NULL, ranking_measure3 IN VARCHAR2 := NULL, result_percentage IN NUMBER := 1, result_limit IN NUMBER := NULL, attribute_list IN VARCHAR2 := NULL) RETURN sys.sqlset PIPELINED;
パラメータ
表125-35 SELECT_CURSOR_CACHEファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
SQLチューニング・セットの名前。 |
|
|
|
カーソル・キャッシュから選択したSQLのオブジェクト・リストに存在するオブジェクトを指定します。 |
|
選択したSQLのorder-by句。 |
|
指定されたランキング・メジャーに従って、上位N%を選択するフィルタ。このパラメータは、1つのランキング・メジャーが指定されている場合にのみ適用されることに注意してください。 |
|
ランキング・メジャーでランク付けした(フィルタ済の)ソースの先頭から数件取得されるSQL文。 |
|
結果として戻すSQL文の属性リスト。有効な値は、次のとおりです。
|
戻り値
このファンクションは、各データ・ソースで検出されるSQL_ID
またはPLAN_HASH_VALUE
の組合せごとに1つのSQLSET_ROW
を戻します。
使用上の注意
このファンクションで提供されるフィルタは、現行のユーザーが実行するSQLの一部として評価されます。したがって、それらのフィルタは、ユーザーのセキュリティ権限で実行され、ユーザーがアクセスできるすべての構成メンバーおよび副問合せを含んでいますが、それ以外のものは含んでいません。
ユーザーには、カーソル・キャッシュ・ビューに対する権限が必要です。
例
-- Get sql ids and sql text for statements with 500 buffer gets. SELECT sql_id, sql_text FROM table(DBMS_SQLTUNE.SELECT_CURSOR_CACHE('buffer_gets > 500')) ORDER BY sql_id; -- Get all the information we have about a particular statement. SELECT * FROM table(DBMS_SQLTUNE.SELECT_CURSOR_CACHE('sql_id = ''4rm4183czbs7j''')); -- Notice that some statements can have multiple plans. The output of the -- SELECT_XXX table functions is unique by (sql_id, plan_hash_value). This is -- because a data source can store multiple plans per sql statement. SELECT sql_id, plan_hash_value FROM table(dbms_sqltune.select_cursor_cache('sql_id = ''ay1m3ssvtrh24''')) ORDER BY sql_id, plan_hash_value; -- PL/SQL examples: load_sqlset will be called after opening a cursor, along the -- lines given below -- Select all statements in the cursor cache. DECLARE cur sys_refcursor; BEGIN OPEN cur FOR SELECT value(P) FROM table(DBMS_SQLTUNE.SELECT_CURSOR_CACHE) P; -- Process each statement (or pass cursor to load_sqlset). CLOSE cur; END;/ -- Look for statements not parsed by SYS. DECLARE cur sys_refcursor; BEGIN OPEN cur for SELECT VALUE(P) FROM table( DBMS_SQLTUNE.SELECT_CURSOR_CACHE('parsing_schema_name <> ''SYS''')) P; -- Process each statement (or pass cursor to load_sqlset). CLOSE cur; end;/ -- All statements from a particular module/action. DECLARE cur sys_refcursor; BEGIN OPEN cur FOR SELECT VALUE(P) FROM table( DBMS_SQLTUNE.SELECT_CURSOR_CACHE( 'module = ''MY_APPLICATION'' and action = ''MY_ACTION''')) P; -- Process each statement (or pass cursor to load_sqlset) CLOSE cur; END;/ -- all statements that ran for at least five seconds DECLARE cur sys_refcursor; BEGIN OPEN cur FOR SELECT VALUE(P) FROM table(DBMS_SQLTUNE.SELECT_CURSOR_CACHE('elapsed_time > 5000000')) P; -- Process each statement (or pass cursor to load_sqlset) CLOSE cur; end;/ -- select all statements that pass a simple buffer_gets threshold and -- are coming from an APPS user DECLARE cur sys_refcursor; BEGIN OPEN cur FOR SELECT VALUE(P) FROM table( DBMS_SQLTUNE.SELECT_CURSOR_CACHE( 'buffer_gets > 100 and parsing_schema_name = ''APPS'''))P; -- Process each statement (or pass cursor to load_sqlset) CLOSE cur; end;/ -- select all statements exceeding 5 seconds in elapsed time, but also -- select the plans (by default we only select execution stats and binds -- for performance reasons - in this case the SQL_PLAN attribute of sqlset_row -- is NULL) DECLARE cur sys_refcursor; BEGIN OPEN cur FOR SELECT VALUE(P) FROM table(dbms_sqltune.select_cursor_cache( 'elapsed_time > 5000000', NULL, NULL, NULL, NULL, 1, NULL, 'EXECUTION_STATISTICS, SQL_BINDS, SQL_PLAN')) P; -- Process each statement (or pass cursor to load_sqlset) CLOSE cur; END;/ -- Select the top 100 statements in the cursor cache ordering by elapsed_time. DECLARE cur sys_refcursor; BEGIN OPEN cur FOR SELECT VALUE(P) FROM table(DBMS_SQLTUNE.SELECT_CURSOR_CACHE(NULL, NULL, 'ELAPSED_TIME', NULL, NULL, 1, 100)) P; -- Process each statement (or pass cursor to load_sqlset) CLOSE cur; end;/ -- Select the set of statements which cumulatively account for 90% of the -- buffer gets in the cursor cache. This means that the buffer gets of all -- of these statements added up is approximately 90% of the sum of all -- statements currently in the cache. DECLARE cur sys_refcursor; BEGIN OPEN cur FOR SELECT VALUE(P) FROM table(DBMS_SQLTUNE.SELECT_CURSOR_CACHE(NULL, NULL, 'BUFFER_GETS', NULL, NULL, .9)) P; -- Process each statement (or pass cursor to load_sqlset). CLOSE cur; END; /
この表ファンクションは、1つ以上のトレース・ファイルの内容を読み取り、検出したSQL文をsqlset_row
の形式で戻します。
構文
DBMS_SQLTUNE.SELECT_SQL_TRACE ( directory IN VARCHAR2, file_name IN VARCHAR2 := NULL, mapping_table_name IN VARCHAR2 := NULL, mapping_table_owner IN VARCHAR2 := NULL,, select_mode IN POSITIVE := SINGLE_EXECUTION, options IN BINARY_INTEGER := LIMITED_COMMAND_TYPE, pattern_start IN VARCHAR2 := NULL, pattern_end IN VARCHAR2 := NULL, result_limit IN POSITIVE := NULL) RETURN sys.sqlset PIPELINED;
パラメータ
表125-36 SELECT_SQL_TRACEファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
トレース・ファイルを含むディレクトリ・オブジェクト。 このフィールドは必須です。 |
|
処理するトレース・ファイルの完全な名前または名前の一部。 |
|
マッピング表名。 マッピング表名は大/小文字が区別されないことに注意してください。 マッピング表名が |
|
マッピング表の所有者。 |
|
選択したSQLのorder-by句。 デフォルトは、
|
|
オプション。 デフォルトは、
|
|
対象となるトレース・ファイル・セクションの開始区切りパターン。(現在使用不可) |
|
処理するトレース・ファイル・セクションの終了区切りパターン。(現在使用不可) |
|
フィルタ処理済のソースの先頭から数件取得されるSQL文。 |
戻り値
このファンクションは、SQLSET_ROW
オブジェクトを戻します。
例
次のコードは、いくつかのSQL文のSQLトレースを使用可能にして、SQLチューニング・セットに結果をロードする方法を示しています。
-- turn on the SQL trace in the capture database ALTER SESSION SET EVENTS '10046 TRACE NAME CONTEXT FOREVER, LEVEL 4' -- run sql statements SELECT 1 FROM DUAL; SELECT COUNT(*) FROM dba_tables WHERE table_name = :mytab; ALTER SESSION SET EVENTS '10046 TRACE NAME CONTEXT OFF'; -- create mapping table from the capture database CREATE TABLE mapping AS SELECT object_id id, owner, substr(object_name, 1, 30) name FROM dba_objects WHERE object_type NOT IN ('CONSUMER GROUP', 'EVALUATION CONTEXT', 'FUNCTION', 'INDEXTYPE', 'JAVA CLASS', 'JAVA DATA', 'JAVA RESOURCE', 'LIBRARY', 'LOB', 'OPERATOR', 'PACKAGE', 'PACKAGE BODY', 'PROCEDURE', 'QUEUE', 'RESOURCE PLAN', 'TRIGGER', 'TYPE', 'TYPE BODY') UNION ALL SELECT user_id id, username owner, NULL name FROM dba_users; -- create the directory object where the SQL traces are stored CREATE DIRECTORY SQL_TRACE_DIR as '/home/foo/trace'; -- create the STS EXEC DBMS_SQLTUNE.CREATE_SQLSET('my_sts', 'test purpose'); -- load the SQL statements into STS from SQL TRACE DECLARE cur sys_refcursor; BEGIN OPEN cur FOR SELECT value(p) FROM TABLE( DBMS_SQLTUNE.SELECT_SQL_TRACE( directory=>'SQL_TRACE_DIR', file_name=>'%trc', mapping_table_name=>'mapping')) p; DBMS_SQLTUNE.LOAD_SQLSET('my_sts', cur); CLOSE cur; END; /
このファンクションは、SQLSETの内容を読み取ります。
構文
DBMS_SQLTUNE.SELECT_SQLSET ( sqlset_name IN VARCHAR2, basic_filter IN VARCHAR2 := NULL, object_filter IN VARCHAR2 := NULL, ranking_measure1 IN VARCHAR2 := NULL, ranking_measure2 IN VARCHAR2 := NULL, ranking_measure3 IN VARCHAR2 := NULL, result_percentage IN NUMBER := 1, result_limit IN NUMBER := NULL) attribute_list IN VARCHAR2 := NULL, plan_filter IN VARCHAR2 := NULL, sqlset_owner IN VARCHAR2 := NULL) RETURN sys.sqlset PIPELINED;
パラメータ
表125-37 SELECT_SQLSETファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
SQLチューニング・セットの名前。 |
|
|
|
カーソル・キャッシュから選択したSQLのオブジェクト・リストに存在するオブジェクトを指定します。 |
|
選択したSQLのorder-by句。 |
|
指定されたランキング・メジャーに従って、上位N%を選択するフィルタ。このパラメータは、1つのランキング・メジャーが指定されている場合にのみ適用されることに注意してください。 |
|
ランキング・メジャーでランク付けした(フィルタ済の)ソースの先頭から数件取得されるSQL文。 |
|
結果として戻すSQL文の属性リスト。有効な値は、次のとおりです。
|
|
計画フィルタ。 |
|
SQLチューニング・セットの所有者。現行のスキーマ所有者の場合は |
戻り値
このファンクションは、各データ・ソースで検出されるSQL_ID
またはPLAN_HASH_VALUE
の組合せごとに1つのSQLSET_ROW
を戻します。
使用上の注意
このファンクションで提供されるフィルタは、現行のユーザーが実行するSQLの一部として評価されます。したがって、それらのフィルタは、ユーザーのセキュリティ権限で実行され、ユーザーがアクセスできるすべての構成メンバーおよび副問合せを含んでいますが、それ以外のものは含んでいません。
例
-- select from a sql tuning set DECLARE cur sys_refcursor; BEGIN OPEN cur FOR SELECT VALUE (P) FROM table(dbms_sqltune.select_sqlset('my_workload')) P; -- Process each statement (or pass cursor to load_sqlset) CLOSE cur; END; /
このファンクションは、ワークロード・リポジトリからSQL文を収集します。オーバーロードされたフォームによって、次の操作を実行できます。
begin_snap
とend_snap
の間のすべてのスナップショットからSQL文を収集する。
ワークロード・リポジトリ・ベースラインからSQL文を収集する。
構文
DBMS_SQLTUNE.SELECT_WORKLAOD_REPOSITORY ( begin_snap IN NUMBER, end_snap IN NUMBER, basic_filter IN VARCHAR2 := NULL, object_filter IN VARCHAR2 := NULL, ranking_measure1 IN VARCHAR2 := NULL, ranking_measure2 IN VARCHAR2 := NULL, ranking_measure3 IN VARCHAR2 := NULL, result_percentage IN NUMBER := 1, result_limit IN NUMBER := NULL attribute_list IN VARCHAR2 := NULL) RETURN sys.sqlset PIPELINED; DBMS_SQLTUNE.SELECT_WORKLAOD REPOSITORY ( baseline_name IN VARCHAR2, basic_filter IN VARCHAR2 := NULL, object_filter IN VARCHAR2 := NULL, ranking_measure1 IN VARCHAR2 := NULL, ranking_measure2 IN VARCHAR2 := NULL, ranking_measure3 IN VARCHAR2 := NULL, result_percentage IN NUMBER := 1, result_limit IN NUMBER := NULL) attribute_list IN VARCHAR2 := NULL) RETURN sys.sqlset PIPELINED;
パラメータ
表125-38 SELECT_WORKLOAD_REPOSITORYファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
開始スナップショット(この値を含めない) |
|
終了スナップショット(この値を含む) |
|
ベースライン時間の名前。 |
|
|
|
SWRFから選択したSQLのオブジェクト・リストに存在するオブジェクトを指定します。 |
|
選択したSQLのorder-by句。 |
|
指定されたランキング・メジャーに従って、上位N%を選択するフィルタ。このパラメータは、1つのランキング・メジャーが指定されている場合にのみ適用されることに注意してください。 |
|
ランキング・メジャーでランク付けした(フィルタ済の)ソースの先頭から数件取得されるSQL文。 |
|
結果として戻すSQL文の属性リスト。有効な値は、次のとおりです。
|
戻り値
このファンクションは、各データ・ソースで検出されるSQL_ID
またはPLAN_HASH_VALUE
の組合せごとに1つのSQLSET_ROW
を戻します。
使用上の注意
このファンクションで提供されるフィルタは、現行のユーザーが実行するSQLの一部として評価されます。したがって、それらのフィルタは、ユーザーのセキュリティ権限で実行され、ユーザーがアクセスできるすべての構成メンバーおよび副問合せを含んでいますが、それ以外のものは含んでいません。
例
-- select statements from snapshots 1-2 DECLARE cur sys_refcursor; BEGIN OPEN cur FOR SELECT VALUE (P) FROM table(dbms_sqltune.select_workload_repository(1,2)) P; -- Process each statement (or pass cursor to load_sqlset) CLOSE cur; END; /
このプロシージャは、VARCHAR2
型またはNUMBER
型のSQLチューニング・パラメータの値を更新します。
このプロシージャをコールする前に、タスクを初期状態に設定する必要があります。
構文
DBMS_SQLTUNE.set_tuning_task_parameter( task_name IN VARCHAR2, parameter IN VARCHAR2, value IN VARCHAR2);
DBMS_SQLTUNE.set_tuning_task_parameter( task_name IN VARCHAR2, parameter IN VARCHAR2, value IN NUMBER);
パラメータ
表125-39 SET_TUNING_TASK_PARAMETERプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
実行するタスクの識別子。 |
parameter |
設定するパラメータの名前。パラメータをVARCHAR2形式で使用してこのプロシージャで設定できるチューニング・パラメータは、次のとおりです。
|
|
自動チューニング・タスクでのみ、次のパラメータがサポートされます。
|
|
指定したパラメータの新しい値。 |
このファンクションは、SQLテキストのシグネチャを戻します。 このシグネチャを使用して、dba_sql_profiles
のSQLテキストを識別できます。
構文
DBMS_SQLTUNE.SQLTEXT_TO_SIGNATURE ( sql_text IN CLOB, force_match IN BOOLEAN := FALSE) RETURN NUMBER;
パラメータ
表125-40 SQLTEXT_TO_SIGNATUREファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
シグネチャが必要なSQLテキスト。必須です。 |
|
|
戻り値
このファンクションは、指定したSQLテキストのシグネチャを戻します。
このプロシージャは、ステージング表に保存されているプロファイル・データを使用して、システム上にプロファイルを作成します。
構文
DBMS_SQLTUNE.UNPACK_STGTAB_SQLPROF ( profile_name IN VARCHAR2 := '%', profile_category IN VARCHAR2 := 'DEFAULT', replace IN BOOLEAN, staging_table_name IN VARCHAR2, staging_schema_owner IN VARCHAR2 := NULL);
パラメータ
表125-41 UNPACK_STGTAB_SQLPROFプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
アンパックするプロファイルの名前(%ワイルドカードを使用可、大/小文字区別)。 |
|
アンパックするプロファイルのカテゴリ(%ワイルドカードを使用可、大/小文字区別)。 |
|
プロファイルがすでに存在する場合、そのプロファイルを置換するオプション。ステージング表のプロファイルの名前と、別のSQL文のアクティブなプロファイルの名前が同じ場合、プロファイルは置換できません。 |
|
再マップ操作を行う表の名前(二重引用符で囲まれていないかぎり、大/小文字区別なし)。必須です。 |
|
表が存在するスキーマ(二重引用符で囲まれていないかぎり、大/小文字区別なし)。現行のスキーマの場合は |
使用上の注意
このプロシージャを使用するには、ステージング表に対するCREATE
ANY
SQL
PROFILE
権限およびSELECT
権限が必要です。
例
-- Unpack all profiles stored in a staging table EXEC DBMS_SQLTUNE.UNPACK_STGTAB_SQLPROF(replace => FALSE, - staging_table_name => 'PROFILE_STGTAB'); -- If there is a failure during the unpack operation, users can find the profile -- we failed on and perform a remap_stgtab_sqlprof operation targeting it. Then -- they can resume the unpack operation by setting replace to TRUE so that -- the profiles that were already created will just be replaced EXEC DBMS_SQLTUNE.UNPACK_STGTAB_SQLPROF(replace => TRUE, - staging_table_name => 'PROFILE_STGTAB');
このプロシージャは、1つ以上のSQLチューニング・セットを、ステージング表内のそれぞれの場所からSQLチューニング・セット・スキーマにコピーして、適切なSQLチューニング・セットを作成します。
構文
DBMS_SQLTUNE.UNPACK_STGTAB_SQLSET ( sqlset_name IN VARCHAR2 := '%', sqlset_owner IN VARCHAR2 := NULL, replace IN BOOLEAN, staging_table_name IN VARCHAR2, staging_schema_owner IN VARCHAR2 := NULL);
パラメータ
表125-42 UNPACK_STGTAB_SQLSETプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
アンパックするチューニング・セットの名前(NULL以外)。 ワイルドカード文字('%')がサポートされていて、1回のコールで複数のチューニング・セットをアンパックできます。 たとえば、'%'と指定すると、すべてのチューニング・セットがステージング表からアンパックされます。 |
|
チューニング・セットの所有者の名前。現行のスキーマ所有者の場合は |
|
すでに存在するチューニング・セットを置換します。 |
|
ステージング表の名前(大/小文字区別)。このステージング表は、PACK_STGTAB_SQLSETプロシージャへのコールによって移動された表です。 |
|
ステージング表の所有者の名前(大/小文字区別)。現行のスキーマ所有者の場合は |
使用上の注意
ユーザーは、このプロシージャが正常に完了した後、ステージング表を削除できます。
このアンパック・プロシージャは、各SQLチューニング・セットを正常にロードした後でコミットします。いずれかのチューニング・セットの処理に失敗した場合、そのチューニング・セットはアンパックされませんが、サブプログラムですでに認識されているチューニング・セットはそのまま存在します。
SQLチューニング・セット名または所有者名の競合が原因で正常に実行できなかった場合は、ステージング表をREMAP_STGTAB_SQLSETプロシージャで修正してから、このプロシージャを再度コールして残りのチューニング・セットをアンパックしてください。
例
-- unpack all STS in the staging table EXEC DBMS_SQLTUNE.UNPACK_STGTAB_SQLSET(sqlset_name => '%', - sqlset_owner => '%', - replace => FALSE, - staging_table_name => 'STGTAB_SQLSET'); -- errors can arise during STS unpack when a STS in the staging table has the -- same name/owner as STS on the system. In this case, users should call -- remap_stgtab_sqlset to patch the staging table and with which to call unpack -- Replace set to TRUE. EXEC DBMS_SQLTUNE.UNPACK_STGTAB_SQLSET(sqlset_name => '%', - sqlset_owner => '%', - replace => TRUE, - staging_table_name => 'STGTAB_SQLSET');
このプロシージャは、SQLチューニング・セットのSQL文の選択されているフィールドを更新します。
構文
DBMS_SQLTUNE.UPDATE_SQLSET ( sqlset_name IN VARCHAR2, sql_id IN VARCHAR2, attribute_name IN VARCHAR2, attribute_value IN VARCHAR2 := NULL); DBMS_SQLTUNE.UPDATE_SQLSET ( sqlset_name IN VARCHAR2, sql_id IN VARCHAR2, attribute_name IN VARCHAR2, attribute_value IN NUMBER := NULL);
パラメータ