パッケージ・キャッシュ・ステートメントの追い出しイベントのモニター

パッケージ・キャッシュ・イベント・モニターは、データベースのパッケージ・キャッシュからフラッシュされたステートメント項目に関連するデータをキャプチャーします。 このイベント・モニターによって、パッケージ・キャッシュの内容の履歴が取得できます。 これは、SQL 照会のパフォーマンスおよび問題判別のための調査に役立ちます。

概説

パッケージ・キャッシュ・イベント・モニターは、 MON_GET_PKG_CACHE_STMT 表関数と同じ情報を収集します。 これには、使用可能なアクティビティー・メトリック、および項目の実行可能セクション情報の全セットが含まれます。

バージョン 10.1 以降は、最も長く実行されているステートメントに関連した入力引数に関する情報を取得することができます。 このステートメントは、モニター・エレメント max_coord_stmt_exec_time に関連するものです。 このステートメントに関連する入力引数は、pkgcache_stmt_args 論理データ・グループの一部として記録されます。

CREATE EVENT MONITOR ステートメントの 2 つの制御メカニズムは、 キャプチャーするデータ量を制限するのに役立ちます。この 2 つの制御メカニズムとは、 以下の機能です。
  1. 次の条件の 1 つ以上に基づく WHERE 節を使用して、項目をフィルタリングします。
    • 項目のメトリックの最終更新が、その項目がパッケージ・キャッシュから削除されるまでの特定の時間の後に発生したかどうか (UPDATED_SINCE_BOUNDARY_TIME)。 メトリックが最後に更新された時間が、イベント・モニター用に定義された境界時間よりも新しい場合にのみ、項目が収集されます。 イベント・モニターの境界時間は MON_GET_PKG_CACHE_STMT 表関数を使って設定可能です。 イベント・モニターの境界時間がまだ設定されていない場合、UPDATED_SINCE_BOUNDARY_TIME 節を指定しても効果はありません。
    • 項目のセクションの実行回数 (NUM_EXECUTIONS)。
    • ステートメントの実行にかかった時間の合計 (STMT_EXEC_TIME)。
  2. COLLECT DATA 節には以下のオプションがあります。
    • COLLECT BASE DATA

      MON_GET_PKG_CACHE_STMT 表関数と同じ情報、および使用可能なアクティビティー・メトリックの全セットを収集します。

    • COLLECT DETAILED DATA

      COLLECT BASE DATA 節で収集されるものと同じ情報を収集し、 さらに項目の実行可能セクションに関する情報を含みます。

個々の SQL ステートメントの実行について調査する必要がある場合、 MON_GET_PKG_CACHE_STMT 表関数を使用して、 キャッシュされた項目の動作を他の項目の動作と比較できます (項目がまだパッケージ・キャッシュに存在する場合)。キャッシュされた項目についての実行メトリック、コンパイル環境、および詳細な説明は、 診断目的で使用可能です。

項目が既にパッケージ・キャッシュからフラッシュされている場合、 パッケージ・キャッシュ・イベント・モニターを使用して、 パッケージ・キャッシュにキャッシュされていたフラッシュ済みの項目の履歴をレビューできます。履歴データには、 MON_GET_PKG_CACHE_STMT 表関数によって得られる情報と同じものが含まれています。 さらに、イベント・モニターでは、ステートメントの実行可能セクションについての情報が取得できます。 動的 SQL および静的 SQL ステートメントの両方について取得できます。

パッケージ・キャッシュ・イベント・モニターの作成

パッケージ・キャッシュ・イベント・モニターを作成し、パッケージ・キャッシュ・イベント・モニター・データを収集するには、 DBADM または SQLADM 権限が必要です。

パッケージ・キャッシュ・イベント・モニターは、 通常の表または未フォーマット・イベント表のどちらかに出力を書き込めます。

パッケージ・キャッシュ・イベント・モニターを作成する前に、 イベント・モニターの出力を保管する表スペースを決定します。 表スペースが指定されない場合、CREATE EVENT MONITOR ステートメントは、 デフォルトの表スペースを使用します。ただし、 推奨されている手法は、イベント・モニターに関連付けられている出力表を保管するための専用の表スペースを構成する方法です。 未フォーマット・イベント表を使用する場合は、 イベント・データが UE 表のインライン BLOB 列内に確実に入るように、 少なくとも 8K のページ・サイズの表スペースにパッケージ・キャッシュ・イベント・モニターを作成してください。 BLOB 列がインライン化されていない場合は、未フォーマット・イベント表に対するイベントの書き込みと読み出しのパフォーマンスが効率的でない可能性があります。

デフォルトおよびベスト・プラクティスを使用してパッケージ・キャッシュ・イベント・モニターをセットアップするには、以下のステップを実行します。
  • CREATE EVENT MONITOR ステートメントを発行してイベント・モニターを作成します。 以下の例では、可能な場合はデフォルトを使用し、未フォーマット・イベント表を既存の表スペース MY_EVMON_TABLESPACE に保管することを指定します。
    
    CREATE EVENT MONITOR MY_PKGCACHE_EVMON
      FOR PACKAGE CACHE
       WRITE TO UNFORMATTED EVENT TABLE (IN MY_EVMON_TABLESPACE)

データ収集の有効化

データ収集を有効にするには、 SET EVENT MONITOR STATE ステートメントを使用して、イベント・モニターを活動化する必要があります。パッケージ・キャッシュ・イベント・モニターはパッシブ なイベント・モニターではありません。 活動化された後、ステートメントがパッケージ・キャッシュからフラッシュされ、 パッケージ・キャッシュ・イベント・モニターの作成時に設定されたフィルタリング基準を満たす度に、 自動的にデータ収集を開始します。

パッケージ・キャッシュ・イベント・モニターによりキャプチャーされたイベント・データへのアクセス

作業単位イベント・モニターは、 通常の表にデータを書き込むことも、 未フォーマット・イベント (UE) 表にバイナリー・フォーマットのデータを書き込むこともできます。 通常の表のデータには SQL を使用してアクセスできます。

UE 表のデータにアクセスするには、 次のいずれかの表関数を使用します。
EVMON_FORMAT_UE_TO_XML
未フォーマット・イベント表から XML 文書にデータを抽出します。
EVMON_FORMAT_UE_TO_TABLES
未フォーマット・イベント表から一連のリレーショナル表にデータを抽出します。
これらの表関数のいずれかを使用する場合、 関数のパラメーターの 1 つとして SELECT ステートメントを含めることによって、 どのデータを抽出するかを指定できます。 SELECT ステートメントにより提供される選択、順序付け、その他の面についてはすべて制御できます。

スキーマ・ファイル ~/sqllib/misc/DB2EvmonPkgCache.xsd は、パッケージ・キャッシュ・イベント・モニター・レポートの期待される出力を、XML 文書化するのに使用します。スキーマ・ファイルは、共通のモニター・スキーマ・ファイル (DB2MonCommon.xsd) を参照するため、共通の内容を重複させずにすみます。

XML スタイル・シートは ~/sqllib/samples/jdbc/DB2EvmonPkgCache.xsl で提供されます。

これらの表関数を使用して、SELECT ステートメントを使用して抽出するデータを指定します。SELECT ステートメントにより提供される選択、順序付け、その他の面についてはすべて制御できます。

db2evmonfmt コマンドを使用して、以下のタスクを実行することもできます。
  • 実行可能 ID、セクション・タイプ、照会コストの見積もり、ステートメント・パッケージ・キャッシュ ID、またはフラッシュ時刻の各属性に基づいて、関心対象のイベントを選択します。
  • テキスト・レポートまたはフォーマット済み XML 文書のどちらの形式で出力を受け取るかを選択します。
  • db2evmonfmt コマンドに提供されているものを使用する代わりに、独自の XSLT スタイル・シートを作成して、出力形式を制御します。
例えば、以下のコマンドにより、次のようなパッケージ・キャッシュ・レポートが提供されます。
  1. データベース SAMPLE で過去 24 時間に発生したパッケージ・キャッシュ・イベントを選択します。これらのイベント・レコードは、SAMPLE_PKGCACHE_EVENTS という未フォーマット・イベント表から取得します。
  2. DB2EvmonPkgCache.xsl スタイル・シートを使用してフォーマット済みのテキスト出力を提供します。
java db2evmonfmt -d SAMPLE -ue SAMPLE_PKGCACHE_EVENTS -ftext -ss Db2EvmonPkgCache.xsl -hours 24