データベースのモニタ

モニタ方式の概要

DB2 UDBでは、以下のような事象に対応するために、さまざまなモニタ方法が準備されている。

Explainファシリティー
SQL文のアクセス計画を解析する。
スナップショット・モニタ
ディスク、バッファプール、事前取り出し、ロック、レコードブロックに関する情報を収集する。
イベント・モニタ
一定期間にわたってデータベースの活動を追跡し、資源の利用状況を解析する。

Explainファシリティー

Explainファシリティーは、DB2 UDBに投入されたSQL文にどのようにアクセスプランが作成されたかを記録していく。その使用手順は次のようになる。

  1. EXPLAIN.DDLを実行してExplain表を作成する。但し、Visual Explainを初めて作成するときには自動的に作成される。
  2. Explainデータを収集し、Explain表に保存する。
  3. Visual Explainなどを用い、収集したデータを分析する。

Explainデータとは、通常ExplainデータとExplain Snapshotデータである。Visual Explainを使用するためには、Snapshotデータの取得が必須である。なお、Explain可能なSQLはDML(SELECT/INSERT/UPDATE/DELETE/VALUES)のみ。

Explainデータの収集には、以下のような方法がある。

EXPLAIN文

EXPLAIN文は、単一の動的SQL文のアクセスプランの収集に使用する。その構文は以下の通り。

EXPLAIN (ALL | PLAN | PLAN SELECTION) 
  [(WITH | FOR ) SNAPSHOT]
  FOR dml-statement
ALL | PLAN | PLAN SELECTION
互換性のために存在。全ては同じ意味
WITH SNAPSHOT
通常情報とSNAPSHOT情報を共に収集
FOR SNAPSHOT
SNAPSHOT情報のみを収集。これらを指定しなければ通常情報のみを収集
dml-statement
分析の対象とするDML文。これらは実際には実行されない。

EXPLAIN文の実行のためにはExplain表に対するINSERT特権が必要である。

特殊レジスタ

一連の動的SQL全てについてExplain情報を取得する場合には、特殊レジスタを設定することで、後続の動的SQL文全てを収集の対象とすることが出来る。

SET CURRENT 
  EXPLAIN MODE     [NO | YES | EXPLAIN]
SET  CURRENT 
  EXPLAIN SNAPSHOT [NO | YES | EXPLAIN]
MODE
通常Explain情報の取得方法を変更する
SNAPSHOT
SNAPSHOT情報の取得方法を変更する
NO
Explain情報を取得しない
YES
SQL文を実行し、Explain情報を取得する。
EXPLAIN
SQL文を実行せず、Explain情報のみを取得する。

Explain BINDオプション

パッケージから使用されるSQL文についてのExplain情報を取得するには、バインドオプションとして指定する。

BIND ....... 
  [ EXPLAIN (NO | YES | ALL) ]
  [ EXPLSNAP (NO | YES | ALL) ]
EXPLAIN
通常Explain情報の取得方法を変更する
EXPLSNAP
SNAPSHOT情報の取得方法を変更する
NO
Explain情報を取得しない
YES
静的SQLの情報を収集する
ALL
静的SQL・動的SQLの情報を収集する

Explain表以外のアクセスプランの収集

dynexpln・db2explnユーティリティは、それぞれ動的・静的SQLのアクセスプランを作成する。但し、収集できる情報は、Explain表を用いる方が多くなる。

Explainデータの解析

Explainデータは、アクセスの順番や、処理の内容(スキャン方法や結合・ソート方法)、そしてその処理コストを含む。

スナップショット・モニタ

スナップショット・モニタは、各種のデータベース資源の利用状況についての情報を収集し、適当な間隔で出力するためのものである。情報を収集できる資源とは以下のようなものである。

グループスイッチ名提供される情報
分類SORT使用されたヒープ数やオーバーフロー
ロックLOCK使用中数・デッドロック数
TABLE読み書きの行数
バッファプールBUFFERPOOL読み書きの回数、所要時間
作業単位UOW開始・終了時刻、完了状況
SQL文STATEMENT開始・停止時刻、文の識別

これらについての情報収集は、その資源ごとに、インスタンスレベルまたはアプリケーションレベルで切り替えることが出来る。インスタンスレベルで設定するためには、UPDATE DBM CFG文を使用し、アプリケーションレベルで切り替えるには、UPDATE MONITOR SWITCHES文を使用する。

UPDATE DBM CONFIGURATION 
  USING DFT_MON_resources (ON | OFF)
UPDATE MONITOR SWITCHES 
  USING resources (ON | OFF)

これらの実行のためには、SYSADM, SYSCTRL, SYSMAINTのいずれかの権限が必要となる。

このようにして収集されたデータは、GET SNAPSHOTコマンドで参照できる。なお、ビジュアル・パフォーマンス・モニタを使用すると、これらのスナップショットを自動的に一定間隔で発行し、その推移を見ることが出来る。

GET SNAPSHOT FOR 
  resources ON db-alias

これらデータのほとんどはカウンタであり、それぞれが停止状態から活動状態に移ったときに値が初期化されるが、RESET MONITORコマンドで値をリセットすることが出来る

RESET MONITOR 
  ( FOR DATABASE db-alias | ALL )

イベント・モニタ

スナップショット・モニタは、期間中に発生したイベントをカウントするものであるのに対し、イベント・モニタは、データベースに特定のイベントやトランザクションが発生した場合に、それを記録するものである。イベント・モニタで記録できるイベントには、以下のようなものがある。

DATABASE / TABLE / TABLESPACES / BUFFERPOOLS
最後のアプリケーションの切断
DEADLOCKS
各デッドロックの発生
STATEMENT
データベースに投入されたそれぞれのSQL文
TRANSACTION
各トランザクションの完了

これらのイベントの記録先は、データベース・オブジェクトとして、DDL文によって作成される。この作成には、SYSADM, DBADMのいずれかの権限が必要である。その構文は以下の通り。

CREATE EVENT MONITOR object-name
  FOR event-name
  WRITE TO FILE output directory 
  MAXFILES file-num 
  MAXFILESIZE file-size

このようにして作成したイベント・モニタは、SET EVENT MONIOR文を用いて活動状態を切り替える。"1"が活動開始、"0"が活動停止である。

SET EVENT MONITOR object-name STATE = (1 | 0)

イベント・モニタ・ファイルはバイナリファイルであり、そのままでは可読ではない。db2evmon(コマンドライン)・db2eva(GUI)といったツールを用いて解析を行う。

トップページに
Last modified: Mon Nov 22 12:42:23 +0900 2021