ヘッダーをスキップ
Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス
11g リリース1(11.1)
E05686-02
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

91 DBMS_PROFILER

DBMS_PROFILERパッケージは、既存のPL/SQLアプリケーションをプロファイルし、パフォーマンス上のボトルネックを識別するためのインタフェースを提供します。またPL/SQLプロファイラ・データを収集し、永続的に保存できます。

この章では、次の項目について説明します。


DBMS_PROFILERの使用方法


概要

このパッケージにより、収集したプロファイラ(パフォーマンス)データを使用して、パフォーマンスの向上やPL/SQLアプリケーションのコード・カバレッジの決定に役立てることができます。アプリケーション開発者は、コード・カバレッジ・データを使用して、増分テストに集中できます。

このインタフェースを使用すると、セッションで実行される指定したすべてのライブラリ・ユニットのプロファイル情報を生成できます。プロファイラは、PL/SQL仮想マシン・レベルで情報を収集します。その情報には、各行の合計実行回数、その行の実行に要した合計時間、およびその行の特定の実行に要した最小時間と最大時間が含まれています。


注意:

データが収集されたPL/SQLユニットに関するコード・カバレッジ値を推論することが可能です。

プロファイル情報は、データベース表に格納されています。そのためデータの問合せが可能になります。ユーザーは、カスタマイズ可能なレポート(サマリー・レポート、最新行、コード・カバレッジ・データなど)を作成できます。また、データの分析も可能です。

PROFTAB.SQLスクリプトは、表91-1表91-2および表91-3にリストした列、データ型および定義を持つ表を作成します。

表91-1 表PLSQL_PROFILER_RUNSの列

データ型 定義

runid

NUMBER PRIMARY KEY

plsql_profiler_runnumberで作成される一意の実行識別子。

related_run

NUMBER

(クライアントとサーバーの相関関係に)関連する実行の実行ID。

run_owner

VARCHAR2(32)

実行を開始したユーザー。

run_date

DATE

実行の開始時間。

run_comment

VARCHAR2(2047)

この実行に関してユーザーが指定したコメント。

run_total_time

NUMBER

この実行の経過時間(ナノ秒)。

run_system_info

VARCHAR2(2047)

未使用。

run_comment1

VARCHAR2(2047)

追加のコメント。

spare1

VARCHAR2(256)

未使用。


表91-2 表PLSQL_PROFILER_UNITSの列

データ型 定義

runid

NUMBER

主キー。plsql_profiler_runsを参照。

unit_number

NUMBER

主キー。内部的に生成されたライブラリ・ユニット番号。

unit_type

VARCHAR2(32)

ライブラリ・ユニットのタイプ。

unit_owner

VARCHAR2(32)

ライブラリ・ユニットの所有者名。

unit_name

VARCHAR2(32)

ライブラリ・ユニットにおけるライブラリ・ユニット名のタイムスタンプ。

unit_timestamp

DATE

複数実行間にユニットで発生した変更を検出するため、将来使用される予定。

total_time

NUMBER

このユニットで経過した合計時間(ナノ秒)。プロファイラはこのフィールドを設定しませんが、分析ツールで利用するために用意されています。

spare1

NUMBER

未使用。

spare2

NUMBER

未使用。


表91-3 表PLSQL_PROFILER_DATAの列

データ型 定義

runid

NUMBER

主キー。一意の(生成された)実行識別子。

unit_number

NUMBER

主キー。内部的に生成されたライブラリ・ユニット番号。

line#

NUMBER

主キー。ユニット内のNULL以外の行番号。

total_occur

NUMBER

行が実行された回数。

total_time

NUMBER

行の実行に要した合計時間(ナノ秒)。

min_time

NUMBER

この行の最小実行時間(ナノ秒)。

max_time

NUMBER

この行の最大実行時間(ナノ秒)。

spare1

NUMBER

未使用。

spare2

NUMBER

未使用。

spare3

NUMBER

未使用。

spare4

NUMBER

未使用。


Oracle Databaseのバージョン8.xには、PL/SQLデモ用スクリプトに、文脈依存のレポート・ライター(profrep.sql)のサンプルが準備されています。


セキュリティ・モデル

プロファイラは、ユーザーにCREATE権限があるユニットのデータのみ収集します。EXECUTE ONLYアクセス権限が付与されているユニットは、このパッケージを使用してプロファイルすることはできません。通常、ユニットをデバッグできるユーザーは、そのユニットをプロファイルできます。ただし、ユニットはDEBUGでコンパイルされているかどうかに関係なく、プロファイルできます。プロファイル対象のモジュールは、DEBUGでコンパイルすることをお薦めします。これによって、データベース内のユニットに関する追加情報が提供されます。


注意:

DBMS_PROFILERは、NATIVEモードでコンパイルされたプログラム・ユニットを、ユーザーにはCREATE権限がないかのように処理します。つまり、ユーザーが出力を取得することはありません。


使用上の注意

一般的な実行

アプリケーションのパフォーマンス向上は、反復プロセスです。この反復プロセスには、次の手順が伴います。

  1. プロファイラ・データの収集を行う1つ以上のベンチマーク・テストを使用して、アプリケーションを実行します。

  2. プロファイラ・データを分析し、パフォーマンス上の問題を識別します。

  3. 問題を解決します。

PL/SQLプロファイラでは、「実行」という概念を使用してこのプロセスをサポートします。 実行には、プロファイラ・データの収集を行うベンチマーク・テストを介した、アプリケーションの実行が含まれます。 実行の開始および終了は、START_PROFILERファンクションおよびSTOP_PROFILERファンクションをコールして制御できます。

一般的な実行には、次の処理が含まれます。

アプリケーションの実行時、プロファイラ・データは、実行期間中存続するメモリー・データ構造に収集されます。 実行の途中でFLUSH_DATAファンクションをコールすると、増分データを取得し、割り当てられたプロファイラ・データ構造のメモリーを解放できます。

収集されたデータをフラッシュすると、その内容がデータベース表に格納されます。この表は、プロファイラ・ユーザーのスキーマにすでに存在している必要があります。PROFTAB.SQLスクリプトは、プロファイラ・データを継続的に格納するための表や他のデータ構造を作成します。

PROFTAB.SQLを実行すると現行の表が削除されるので、注意してください。PROFTAB.SQLスクリプトは、RDBMS/ADMINディレクトリにあります。PL/SQLユニットの初回実行など、一部のPL/SQL操作には、実行中のPL/SQLユニットにバイト・コードをロードするカタログ表へのI/Oが含まれる場合があります。また、パッケージ・プロシージャまたはファンクションの初回コール時は、パッケージ初期化コードの実行に時間がかかる場合があります。

この時間的なオーバーヘッドを避けるためには、プロファイラ・データの収集前に、データベースのウォーム・アップを行います。ウォーム・アップを行うには、プロファイラ・データを収集せずにアプリケーションを1回実行します。

プロファイルは、システムの全ユーザーについて行うことができます。たとえば、使用中か否かに関係なく、あるパッケージの全ユーザーをプロファイルできます。このような場合、SYSADMINは、変更したPROFLOAD.SQLスクリプトで次の内容を実行します。

2通りの例外生成方法

このパッケージの各ルーチンには、エラーのレポート方法が2通りあります。

いずれの場合も、ファンクションおよびプロシージャのパラメータは同じです。エラーのレポート方法のみ異なります。エラーがある場合、ファンクションが戻すエラー・コードと、プロシージャが呼び出す例外は対応しています。

次の項では、ファンクションのフォームに関する詳細を示しますが、プロシージャについても同じです。


例外

表91-4 DBMS_PROFILERの例外

例外 説明

version_mismatch

error_versionに相当します。

profiler_error

"error_param"または"error_io"のいずれかに相当します。


ファンクションからの戻り値が0(ゼロ)の場合は、正常終了を示します。0(ゼロ)以外の戻り値は、エラー状態を示します。発生する可能性のあるエラーは、次のとおりです。

    error_param constant binary_integer := 1;

    error_io    constant binary_integer := 2;

    error_version constant binary_integer := -1;

DBMS_PROFILERサブプログラムの要約

表91-5 DBMS_PROFILERパッケージのサブプログラム

サブプログラム 説明

FLUSH_DATAファンクションおよびプロシージャ


ユーザーのセッションで収集されたプロファイラ・データをフラッシュします。

GET_VERSIONプロシージャ


このAPIのバージョンを取得します。

INTERNAL_VERSION_CHECKファンクション


このバージョンのDBMS_PROFILERパッケージが、データベース内の実装で動作可能であることを検証します。

PAUSE_PROFILERファンクションおよびプロシージャ


プロファイラ・データ収集を一時停止します。

RESUME_PROFILERファンクションおよびプロシージャ


プロファイラ・データ収集を再開します。

START_PROFILERファンクションおよびプロシージャ


ユーザーのセッションでプロファイラ・データ収集を開始します。

STOP_PROFILERファンクションおよびプロシージャ


ユーザーのセッションでプロファイラ・データ収集を停止します。



FLUSH_DATAファンクションおよびプロシージャ

このファンクションは、ユーザーのセッションで収集されたプロファイラ・データをフラッシュします。データは、以前から存在しているデータベース表にフラッシュされます。


注意:

PROFTAB.SQLスクリプトを使用して、プロファイラ・データを継続的に格納するための表や他のデータ構造を作成します。

構文

DBMS_PROFILER.FLUSH_DATA
  RETURN BINARY_INTEGER;

DBMS_PROFILER.FLUSH_DATA;

GET_VERSIONプロシージャ

このプロシージャは、このAPIのバージョンを取得します。

構文

DBMS_PROFILER.GET_VERSION (
   major  OUT BINARY_INTEGER,
   minor  OUT BINARY_INTEGER);

パラメータ

表91-6 GET_VERSIONプロシージャのパラメータ

パラメータ 説明

major

DBMS_PROFILERのバージョン番号。

minor

DBMS_PROFILERのリリース番号。



INTERNAL_VERSION_CHECKファンクション

このファンクションは、このバージョンのDBMS_PROFILERパッケージが、データベース内の実装で動作可能であることを検証します。

構文

DBMS_PROFILER.INTERNAL_VERSION_CHECK
  RETURN BINARY_INTEGER;

PAUSE_PROFILERファンクションおよびプロシージャ

このファンクションは、プロファイラ・データ収集を一時停止します。

構文

DBMS_PROFILER.PAUSE_PROFILER
  RETURN BINARY_INTEGER;

DBMS_PROFILER.PAUSE_PROFILER;

RESUME_PROFILERファンクションおよびプロシージャ

This function resumes profiler data collection.

構文

DBMS_PROFILER.RESUME_PROFILER
  RETURN BINARY_INTEGER;

DBMS_PROFILER.RESUME_PROFILER;

START_PROFILERファンクションおよびプロシージャ

このファンクションは、ユーザーのセッションでプロファイラ・データ収集を開始します。

START_PROFILERファンクションのフォームは2種類、オーバーロードされています。1つはコール結果のみでなく、実行を開始した実行番号も戻します。もう1つは実行番号を戻しません。最初のフォームは、プロファイラを制御するGUIベースのツールで使用することを目的としています。

構文

DBMS_PROFILER.START_PROFILER(
   run_comment   IN VARCHAR2 := sysdate,
   run_comment1  IN VARCHAR2 :='',
   run_number    OUT BINARY_INTEGER)
 RETURN BINARY_INTEGER;

DBMS_PROFILER.START_PROFILER(
   run_comment IN VARCHAR2 := sysdate,
   run_comment1 IN VARCHAR2 :='')
RETURN BINARY_INTEGER;

DBMS_PROFILER.START_PROFILER(
   run_comment   IN VARCHAR2 := sysdate,
   run_comment1  IN VARCHAR2 :='',
   run_number    OUT BINARY_INTEGER);

DBMS_PROFILER.START_PROFILER(
   run_comment IN VARCHAR2 := sysdate,
   run_comment1 IN VARCHAR2 :='');

パラメータ

表91-7 START_PROFILERファンクションのパラメータ

パラメータ 説明

run_comment

実行するプロファイラごとに、コメントを指定できます。たとえば、コメントによって、データ収集で使用したベンチマーク・テストの名前およびバージョンを提供できます。

run_number

実行番号を格納します。ユーザーは実行データを格納しておき、後で再コールできます。

run_comment1

実行に関するわかりやすいコメントを記述できます。



STOP_PROFILERファンクションおよびプロシージャ

このファンクションは、ユーザーのセッションでプロファイラ・データ収集を停止します。

このファンクションには、セッションでそれまでに収集したデータをフラッシュする副次効果があり、これが実行の終了を示します。

構文

DBMS_PROFILER.STOP_PROFILER
  RETURN BINARY_INTEGER;

DBMS_PROFILER.STOP_PROFILER;