153 DBMS_SQL_MONITOR

DBMS_SQL_MONITORパッケージでは、リアルタイムSQL監視およびリアルタイム・データベース操作監視について説明します。

この章のトピックは、次のとおりです:

参照:

DBMS_SQLTUNE

153.1 DBMS_SQL_MONITORの概要

DBMS_SQL_MONITORパッケージでは、リアルタイムSQL監視およびリアルタイム・データベース操作監視について説明します。

これらの機能によって、高コストとみなされているSQL文、PL/SQLブロックまたはコンポジット・データベース操作の自動監視が可能になります。単一のSQL文、あるいは単一のPL/SQLプロシージャまたは機能はシンプル・データベースの操作です。コンポジット・データベースの操作は、データベース・セッションで定義された2つの時点間のアクティビティです。監視されるデータは、V$SQL_MONITORおよびV$SQL_PLAN_MONITORビューに収集されます。

次のサブプログラムは、コンポジット・データベース操作の監視を開始および終了します。

次のサブプログラムは、V$SQL_MONITORおよびV$SQL_PLAN_MONITORで収集された監視データに関するレポートを作成します。

153.2 DBMS_SQL_MONITORのセキュリティ・モデル

このパッケージはPUBLICで使用可能で、実行者権限で実行します。レポート機能では、SELECT_CATALOG_ROLEロールによって提供される、カタログからデータを選択する権限が必要です。

153.3 DBMS_SQL_MONITORの定数

DBMS_SQL_MONITORパッケージでは、次の表に示す定数が使用されます。

表153-1 DBMS_SQL_MONITORの定数

定数 タイプ 説明

FORCE_TRACKING

VARCHAR2(30)

'Y'

操作の開始時にコンポジット・データベースの操作を強制的に追跡します。

NO_FORCE_TRACKING

VARCHAR2(30)

'N'

操作の開始時にコンポジット・データベースの操作を強制的には追跡しません。CPUまたはI/O時間を5秒消費した場合にのみ追跡されます。

153.4 DBMS_SQL_MONITORサブプログラムの要約

この表は、DBMS_SQL_MONITORパッケージのサブプログラムについて説明しています。

表153-2 DBMS_SQL_MONITORパッケージのサブプログラム

サブプログラム 説明

BEGIN_OPERATIONファンクション

このファンクションは、現在のセッションでコンポジット・データベースの操作を開始します。

END_OPERATIONプロシージャ

このファンクションは、現在のセッション内のコンポジット・データベースの操作を終了します。指定されたコンポジット・データベース操作がない場合は、このファンクションの効果はありません。

REPORT_SQL_MONITORファンクション

このファンクションは、シンプル・データベースまたはコンポジット・データベースの操作に関する監視情報を含む詳細レポートを作成します。

REPORT_SQL_MONITOR_XMLファンクション

このファンクションはREPORT_SQL_MONITORファンクションと同じですが、戻り値の型はXMLTypeです。

REPORT_SQL_MONITOR_LISTファンクション

このファンクションは、Oracle Databaseによって監視されたすべてのデータベース操作またはデータベース操作のサブセットに関するレポートを作成します。

REPORT_SQL_MONITOR_LIST_XMLファンクション

このファンクションはREPORT_SQL_MONITOR_LISTファンクションと同じですが、XMLTypeを戻します。

153.4.1 BEGIN_OPERATIONファンクション

このファンクションは、現在のセッションでコンポジット・データベースの操作を開始します。

構文

DBMS_SQL_MONITOR.BEGIN_OPERATION (
   dbop_name       IN VARCHAR2,
   dbop_eid        IN NUMBER   := NULL,
   forced_tracking IN VARCHAR2 := NO_FORCE_TRACKING,
   attribute_list  IN VARCHAR2 := NULL,
   session_id      IN NUMBER   := NULL,
   session_serial  IN NUMBER   := NULL)
  RETURN NUMBER;

パラメータ

表153-3 BEGIN_OPERATIONプロシージャのパラメータ

パラメータ 説明

dbop_name

コンポジット・データベース操作の名前です。

dbop_eid

コンポジット・データベース操作の現在の実行に対する一意の識別子です。

forced_tracking

追跡を強制実行するかどうか。使用可能な値は次のとおりです。

  • FORCE_TRACKING - 操作の開始時にコンポジット・データベース操作を強制的に追跡します。文字列変数Yを使用することもできます。

  • NO_FORCE_TRACKING - CPUまたはI/O時間を5秒以上消費した場合にのみ操作を追跡します。文字列変数Nを使用することもできます。

「DBMS_SQL_MONITORの定数」を参照してください。

attribute_list

ユーザーが作成した属性のリストです。これは、名前/値ペア('table_name=emp, operation=load'など).のカンマ区切りリストです。

session_id 監視するセッションのセッションID。省略した場合(またはNULLの場合)、データベースは現在のセッションを監視します。
session_serial 監視するセッションのシリアル番号。省略した場合(またはNULLの場合)、データベースはセッションIDのみを使用してセッションを決定します。

戻り値

このファンクションは、データベース操作の実行IDを戻します。dbop_eidの値がNULLの場合、データベースは一意の値を生成します。

153.4.2 END_OPERATIONプロシージャ

このファンクションは、現在のセッション内のコンポジット・データベースの操作を終了します。指定されたコンポジット・データベース操作がない場合は、このファンクションの効果はありません。

構文

DBMS_SQL_MONITOR.END_OPERATION(
   dbop_name       IN VARCHAR2,
   dbop_eid        IN NUMBER)
  RETURN NUMBER;

パラメータ

表153-4 END_OPERATIONプロシージャのパラメータ

パラメータ 説明

dbop_name

コンポジット・データベース操作の名前です。

dbop_eid

コンポジット・データベース操作の現在の実行に対する一意の識別子です。

153.4.3 REPORT_SQL_MONITORファンクション

このファンクションは、シンプル・データベースまたはコンポジット・データベースの操作に関する監視情報を含む詳細レポートを作成します。

各操作には、キー情報および関連付けられているグローバルな統計情報が指定されます。このファンクションを使用して、シンプル・データベースまたはコンポジット・データベースの操作に関する詳細な監視情報を取得します。

このレポートで対象となるデータベース操作は次になります。

  • Oracle Databaseによって監視された最後のデータベース操作(デフォルトはパラメータなし)。

  • 指定されたセッションで実行され、Oracle Databaseによって監視された最後のデータベース操作。このセッションは、セッションIDか、オプションのシリアル番号で識別されます(-1が現在のセッションです)。

  • sql_idで識別された特定のデータベース操作の最後の実行。

  • sql_idsql_exec_startおよびsql_exec_idを組み合せて識別されたデータベース操作の特定の実行。

  • dbop_nameで識別された特定のコンポジット・データベース操作の最後の実行。

  • dbop_namedbop_exec_idを組み合せて識別されたコンポジット・データベース操作の特定の実行。

構文

DBMS_SQL_MONITOR.REPORT_SQL_MONITOR (
   sql_id                    IN VARCHAR2 DEFAULT  NULL,
   dbop_name                 IN VARCHAR2 DEFAULT  NULL,
   dbop_exec_id              IN NUMBER   DEFAULT  NULL,
   session_id                IN NUMBER   DEFAULT  NULL,
   session_serial            IN NUMBER   DEFAULT  NULL,
   sql_exec_start            IN DATE     DEFAULT  NULL,
   sql_exec_id               IN NUMBER   DEFAULT  NULL,
   inst_id                   IN NUMBER   DEFAULT  NULL,
   start_time_filter         IN DATE     DEFAULT  NULL,
   end_time_filter           IN DATE     DEFAULT  NULL,
   instance_id_filter        IN NUMBER   DEFAULT  NULL,
   parallel_filter           IN VARCHAR2 DEFAULT  NULL,
   plan_line_filter          IN NUMBER   DEFAULT  NULL,
   event_detail              IN VARCHAR2 DEFAULT  'YES',
   bucket_max_count          IN NUMBER   DEFAULT  128,
   bucket_interval           IN NUMBER   DEFAULT  NULL,
   base_path                 IN VARCHAR2 DEFAULT  NULL,
   last_refresh_time         IN DATE     DEFAULT  NULL,
   report_level              IN VARCHAR2 DEFAULT 'TYPICAL',
   type                      IN VARCHAR2 DEFAULT 'TEXT',
   sql_plan_hash_value       IN NUMBER   DEFAULT  NULL,
   con_name                  IN VARCHAR2 DEFAULT  NULL)
  RETURN CLOB; 

パラメータ

表153-5 REPORT_SQL_MONITORプロシージャのパラメータ

パラメータ 説明

sql_id

監視情報の表示が必要なシンプル・データベース操作のSQL_IDNULL(デフォルト)を使用すると、Oracleで監視するシンプル・データベースの最後の操作に関する監視情報が表示されます。

dbop_name

コンポジット・データベース操作の監視情報を表示する対象のDBOP_NAME

dbop_exec_id

監視情報の表示対象であるコンポジット・データベース操作の実行ID。

session_id

指定されたセッションのかわりに実行および監視される文のサブセットのみが対象となります。デフォルトはNULLです。現在のセッションには-1またはUSERENV('SID')を使用します。

session_serial

session_idに加えて、セッション・シリアル番号を指定することで、必要なセッション・インカネーションが対象になっていることを確認できます。session_idNULLの場合、これは無視されます。

sql_exec_start

監視されるSQLの実行が開始された時刻。sql_idが指定されている場合のみ適用可能です。sql_idの特定の実行に対する監視情報を表示するために使用されます。NULL(デフォルト)の場合は、sql_idの最後の実行が表示されます。

sql_exec_id

同じSQL文の異なる実行を識別するためにSQL監視によって内部的に生成された数値のID。したがって、各実行には、同じsql_idが存在するものの、sql_exec_idが異なります。sql_idを指定し、さらにsql_idの特定の実行に関する監視情報の表示に使用する場合にのみ適用可能です。NULL(デフォルト)の場合は、sql_idの最後の実行が表示されます。

inst_id

指定したインスタンスで開始された問合せのみを検索します。現在のインスタンスを対象にするには-1を使用します。デフォルトのNULLでは、すべてのインスタンスを対象にします。

start_time_filter

NULL以外の場合は、この日付より後に開始されたV$ACTIVE_SESSION_HISTORYのアクティビティがレポートに表示されます。NULLの場合は、対象のデータベース操作が開始されるとレポート対象のアクティビティが開始されます。

end_time_filter

NULL以外の場合は、この日付より前に開始されたV$ACTIVE_SESSION_HISTORYのアクティビティがレポートに表示されます。NULLの場合は、対象のデータベース操作が終了するか、SYSDATEの時点(操作が実行中の場合)で、レポート対象のアクティビティが終了します。

instance_id_filter

指定したインスタンスのアクティビティのみを検索します。すべてのインスタンスを対象にするにはNULL(デフォルト)を使用します。問合せがパラレル実行されている場合にのみ適切です。

parallel_filter

パラレル・フィルタはパラレル実行にのみ適用され、これによってパラレル実行に関連する処理のサブセットのみを選択できます。文字列parallel_filterは、次のいずれかにできます。

  • NULL: すべてのパラレル実行サーバーおよび問合せコーディネータが対象になります。

  • ['qc'][servers(<svr_grp>[,] <svr_set>[,] <srv_num>)]では、すべてのNULL値がALLとして解釈されます。

plan_line_filter

SQLの計画で指定した行番号のアクティビティおよび実行統計を選択します。

event_detail

NOに設定すると、アクティビティはwait_classのみによって集計されます。wait_classevent_nameによって集計するには、YES(デフォルト)を使用します。

bucket_max_count

レポートで作成するバケットの最大数を指定します。

bucket_interval

すべてのヒストグラム・バケットの正確な時間間隔(秒)を表します。指定すると、bucket_max_countは無視されます。

base_path

フレックスHTML形式で外部ファイル(Javaスクリプトおよびフラッシュswfファイル)へのアクセスが必要な場合のフレックスHTMLリソースのURLパスです。

last_refresh_time

NULL(デフォルト)ではない場合、レポートが最後に取得された時刻(レポート・タグのSYSDATE属性)。このオプションは、実行中の問合せのレポートを表示するため、およびそのレポートが定期的に更新される際に使用します。新しい変更された情報のみが戻されるため、レポートのサイズを最適化します。特に、次が最適化されます。

  • このオプションを指定すると、SQLテキストが戻されません。

  • アクティビティ・ヒストグラムはその時点で交差するバケットで開始されます。last_refresh_timeがバケットの開始後でも、バケットの内容全体が戻されます。

report_level

レポートの詳細なレベル。次のうち、1つのみを指定できます。

  • NONE: 可能なかぎり最小

  • BASIC: これは、sql_text-plan-xplan-sessions-instance-activity_histogram-plan_histogram-metricsと同じであり、ここでのトークン"-"は、レポート・セクションがレポートに含まれていないことを示します。

  • TYPICAL: plan_histogram以外のすべてです。

  • ALL: すべて

また、レポートの個々のセクションは、±section_nameを使用して、有効または無効にすることもできます。複数のセクションが定義されます。

  • XPLAN: 実行計画を表示します。デフォルトではONです。

  • PLAN: 計画監視統計を表示します。デフォルトではONです。

  • 'SESSIONS': セッションの詳細を表示します。パラレル問合せにのみ適用されます。デフォルトではONです。

  • INSTANCE: インスタンスの詳細を表示します。パラレルおよびインスタンス間の問合せにのみ適用されます。デフォルトではONです。

  • PARALLEL: セッションおよびインスタンスの詳細を指定するための包括的なパラメータです。

  • ACTIVITY: グローバル・レベル、プラン・ライン・レベルおよびセッションでアクティビティの要約を表示します。

  • INSTANCE LEVEL: (該当する場合)。デフォルトではONです。

  • BINDS: 該当する場合にバインド情報を表示します。デフォルトではONです。

  • METRICS: メトリック・データ(CPUやIOなど)を経時的に表示します。デフォルトではONです

  • ACTIVITY_HISTOGRAM: 全体的な問合せアクティビティのヒストグラムを表示します。デフォルトではONです。

  • PLAN_HISTOGRAM: プラン・ライン・レベルでアクティビティ・ヒストグラムを表示します。デフォルトではOFFです。

  • OTHER: その他の情報です。デフォルトではONです。

また、SQLテキストは異なるレベルで指定できます。

  • -SQL_TEXT: レポートにSQLテキストなし。

  • +SQL_TEXT: 部分的なSQLテキストが有効(つまりGV$SQL_MONITORに格納される最初の2000文字まで)。

  • SQL_FULLTEXT: 完全なSQLテキストなし(つまり+sql_text)。

  • +SQL_FULLTEXT: 完全なSQLテキストを表示(デフォルト)。

type

レポート・タイプ。

  • TEXT: テキスト・レポート(デフォルト)。

  • HTML: 単純なHTMLレポート。

  • ACTIVE: データベースのアクティブ・レポート。一部の情報(実行計画、activity_histogram、メトリックおよびplan_histogram)は、このタイプが選択された場合にのみ表示されます。

  • XML: レポートの生データ。

sql_plan_hash_value

指定した計画ハッシュ値があるもののみを対象にします。デフォルトはNULLです。

con_name

マルチテナント・データベース内のコンテナ名。

戻り値

SQL監視レポート、XML文書。

使用上の注意

このファンクションを起動するユーザーは、次の固定ビューにアクセスする権限を持っている必要があります。

  • GV$SQL_MONITOR

  • GV$SQL_PLAN_MONITOR

  • GV$ACTIVE_SESSION_HISTORY

  • GV$SESSION_LONGOPS

  • GV$SQL (SQL全文が要求され、その長さが2KBを超える場合)

153.4.4 REPORT_SQL_MONITOR_XMLファンクション

このファンクションはREPORT_SQL_MONITORファンクションと同じですが、戻り値の型はXMLTypeです。

153.4.5 REPORT_SQL_MONITOR_LISTファンクション

このファンクションは、Oracle Databaseによって監視されたすべてのデータベース操作またはデータベース操作のサブセットに関するレポートを作成します。

各データベース操作には、キー情報および関連付けられているグローバルな統計情報が指定されます。

構文

DBMS_SQL_MONITOR.REPORT_SQL_MONITOR_LIST (
   sql_id                    IN VARCHAR2 DEFAULT  NULL,
   dbop_name                 IN VARCHAR2 DEFAULT  NULL,
   monitor_type              IN NUMBER   DEFAULT  MONITOR_TYPE_ALL, 
   session_id                IN NUMBER   DEFAULT  NULL,
   session_serial            IN NUMBER   DEFAULT  NULL,
   inst_id                   IN NUMBER   DEFAULT  NULL,
   active_since_date         IN DATE     DEFAULT  NULL,
   active_since_sec          IN NUMBER   DEFAULT  NULL,
   last_refresh_time         IN DATE     DEFAULT  NULL,
   report_level              IN VARCHAR2 DEFAULT 'TYPICAL',
   auto_refresh              IN NUMBER   DEFAULT  NULL, 
   base_path                 IN VARCHAR2 DEFAULT  NULL,
   type                      IN VARCHAR2 DEFAULT 'TEXT',
   con_name                  IN VARCHAR2 DEFAULT  NULL)
  RETURN CLOB; 

パラメータ

表153-6 REPORT_SQL_MONITOR_LISTプロシージャのパラメータ

パラメータ 説明

sql_id

監視情報の表示が必要なシンプル・データベース操作のSQL_IDNULL (デフォルト)を使用すると、Oracle Databaseによって監視された最後の操作に関する監視情報が表示されます。

dbop_name

コンポジット・データベース操作の監視情報を表示する対象のDBOP_NAME

monitor_type

モニター・タイプ:

  • MONITOR_TYPE_SQLは、シンプル・データベースの操作のみを戻します。

  • MONITOR_TYPE_DBOPは、コンポジット・データベースの操作を戻します。

  • MONITOR_TYPE_ALLはすべてのタイプを戻します。

session_id

指定されたセッションのかわりに実行および監視されたデータベース操作のサブセットのみが対象となります。デフォルトはNULLです。現在のセッションには-1またはUSERENV('SID')を使用します。

session_serial

session_idに加えて、セッション・シリアル番号を指定することで、必要なセッション・インカネーションが対象になっていることを確認できます。session_idNULLの場合、これは無視されます。

inst_id

指定されたインスタンスで発生するデータベース操作で監視対象のもののみを確認します。レポートが実行されたインスタンスを対象にするには-1を使用します。すべてのインスタンスを対象にするにはNULL(デフォルト)を使用します。

active_since_date

NULL(デフォルト)以外の場合は、指定された日時以降アクティブなデータベース操作で監視対象のものを戻します。これには、実行されているすべての操作のほか、指定された開始時間の後に実行が完了したすべての操作が含まれます。

active_since_sec

NULL(デフォルト)以外の場合は、指定された日時以降アクティブなデータベース操作で監視対象のものを戻します。これには、実行されているすべての操作のほか、指定された日時の後に実行が完了したすべての操作が含まれます。この場合、開始時刻は、現行のSYSDATEから指定した秒数を減じた数値に対して指定されています。たとえば、3600を使用すると、レポートの対象は、過去1時間でアクティブになっているすべての操作に制限されます。

last_refresh_time

NULL(デフォルト)ではない場合、リスト・レポートが最後に取得された時刻。これにより、アプリケーションがリストを表示し、定期的(5秒ごとなど)にレポートを更新する場合に最適化されます。この場合は、指定されたlast_refresh_time以降アクティブになっている監視対象の問合せの実行について、レポートで詳細が示されます。その他の問合せについては、レポートは実行キー(sql_idsql_exec_startおよびsql_exec_id)を戻します。また、指定した日付の後に最初のリフレッシュ時間がある問合せについては、SQL実行キーおよび統計情報のみが戻されます。

report_level

レポートの詳細なレベル。レベルは、BASIC(最大200文字のSQLテキスト)、TYPICAL(カーソルが期限切れになっていないことを前提に、完全なSQLテキストを含む。期限切れの場合は、最大2000文字のSQLテキストが含まれる)またはALL(TYPICALと同じ)にできます。

auto_refresh

監視対象のSQLまたはデータベース操作の実行中にレポート・データが自動的にリフレッシュされるまでの時間間隔(秒単位)を指定します。これは、アクティブなレポート・タイプに適用されます。

base_path

フレックスHTML形式で外部ファイル(Javaスクリプトおよびフラッシュswfファイル)へのアクセスが必要な場合のフレックスHTMLリソースのURLパスです。

type

レポート・タイプ。

  • TEXT: テキスト・レポート(デフォルト)。

  • HTML: 単純なHTMLレポート。

  • ACTIVE: データベースのアクティブ・レポート。このタイプが選択された場合にのみ表示される情報(実行プラン、activity_histogram、メトリックおよびplan_histogram)があります。

  • XML: レポートの生データ。

con_name

マルチテナント・データベース内のコンテナ名。

戻り値

監視されたデータベース操作のリストが含まれる、テキスト形式、XML形式またはHTML形式のレポート。

使用上の注意

  • REPORT_SQL_MONITORファンクションを使用すると、単一のデータベース操作に関する監視情報の詳細が取得されます。

  • このファンクションを呼び出すユーザーには、固定ビューのGV$SQL_MONITORGV$SQLにアクセスする権限が必要です。

153.4.6 REPORT_SQL_MONITOR_LIST_XMLファンクション

このファンクションはREPORT_SQL_MONITOR_LISTファンクションと同じですが、XMLTypeを戻します。