XML モニター情報をフォーマット済みテキストとして表示するためのインターフェース

モニター・インターフェースによって生成された XML 文書に含まれるデータを、データをどう表示するかやどう使用するかに応じて、さまざまに表示できます。 XQuery を使用して、モニター・インターフェースが返した XML 文書を照会および操作できます。 表関数を使用して、XML 文書を読みやすいフォーマットにすることもできます。

XQuery は、XML データを照会および操作するための強力で柔軟なインターフェースを備えています。 一方、エレメント・データをテキスト・ベースのフォーマットで表示した方がよい場合もあります。 XML 文書に含まれるモニター・エレメントを、必要に応じて列指向または行指向のフォーマットで表示できます。 前者は、調べるモニター・エレメントが分かっている場合に便利です。 後者は、例えば待機時間の上位 5 タイプを知りたいときなど、調べるモニター・エレメントが前もって分かっていない場合に便利です。 以下のセクションでは、XML 文書に含まれるモニター・データをフォーマット済みテキストとして表示するための 2 つの方法を説明します。

列指向フォーマットでモニター・エレメントを表示する

XMLTABLE 表関数は XML 文書を入力として取り、それをリレーショナル表に変換することによって、選択された XML 文書エレメントのそれぞれが列に見えるようにします。 このアプローチは、表示したいモニター・エレメントが分かっている場合に便利です。 例えば、event_scstats 論理データ・グループから情報を収集するための DBSTATS という統計イベント・モニターを作成したとします。 このイベント・モニターは出力を表に書き込むよう定義されており、出力表の名前はデフォルトで SCSTATS_DBSTATS です。 (この論理データ・グループに関連付けられるモニター・エレメントについて詳しくは、event_scstats 論理データ・グループを参照してください。) この論理グループのモニター・エレメントには details_xml が含まれます。 details_xml は実際には XML 文書であり、これ自体に system_metrics モニター・エレメントを構成するメトリックが含まれます。 (system_metrics モニター・エレメントに関連付けられるモニター・エレメントについて詳しくは、system_metricsを参照してください。) rows_returned や total_section_time、total_cpu_time など、details_xml に含まれる特定の system_metrics モニター・エレメントを表示するには、XMLTABLE 表関数を使用して、統計イベント・モニターが返す details_xml 文書から選択したモニター・エレメントをフォーマット設定します。 この例を、以下に示します。 (説明の目的上、SQL は特定のサービス・クラスの結果のみを返しています。)

SELECT partition_number, 
       service_class_id, 
       statistics_timestamp, 
       event.rows_returned, 
       event.total_section_time, 
       event.total_cpu_time
 FROM  SCSTATS_DBSTATS as DBSTATS,
 XMLTABLE( XMLNAMESPACES( DEFAULT 'http://www.ibm.com/xmlns/prod/db2/mon' ),
           '$metrics/system_metrics' PASSING XMLPARSE( DOCUMENT DBSTATS.METRICS ) as "metrics"
           COLUMNS
           rows_returned         BIGINT      PATH 'rows_returned',
           total_section_time    BIGINT      PATH 'total_section_time',
           total_cpu_time        BIGINT      PATH 'total_cpu_time'
          ) AS EVENT 
 WHERE service_class_id = 12;

以下の出力は、この照会の結果を示しています。


PARTITION_NUMBER SERVICE_CLASS_ID STATISTICS_TIMESTAMP       ROWS_RETURNED        TOTAL_SECTION_TIME   TOTAL_CPU_TIME
---------------- ---------------- -------------------------- -------------------- -------------------- --------------------
               0               12 2010-01-05-12.14.37.001717                  402                  990              1531250
               0               12 2010-01-05-12.15.00.035409                  402                  990              1531250
               0               12 2010-01-05-12.20.00.021884                  412                 1064              1609375
               0               12 2010-01-05-12.25.00.039175                  422                 1075              1687500
               0               12 2010-01-05-12.29.59.950137                  432                 1104              1765625
               0               12 2010-01-05-12.34.59.948979                  442                 1130              1796875
               0               12 2010-01-05-12.39.59.903928                  452                 1149              1890625
               0               12 2010-01-05-12.44.59.953596                  462                 1178              1953125
               0               12 2010-01-05-12.49.59.970059                  473                 1207              2062500
               0               12 2010-01-05-12.54.59.971990                  483                 1230              2109375

  10 record(s) selected.
この場合、最初の 3 つの列は、統計イベント・モニターが生成した表 SCSTATS_DBSTATS から直接表示されたものです。 終わりの 3 つの列は、この表の DETAILS_XML 列の XML 文書から抽出されたメトリック・モニター・エレメントです。

XMLTABLE の使用法について詳しくは、XMLTABLE 関数に関する資料を参照してください。 MON_GET_*_DETAILS 各種関数の資料にも、XMLTABLE を使用してモニター・エレメントを表示する方法の例が示されています。

行指向フォーマットでモニター・エレメントを表示する

名前が MON_FORMAT_XML_* _BY_ROW の形式の表関数を、XML 文書に含まれるメトリック・モニター・エレメントを表示するための手っ取り早い方法として使用できます。これらは行ベースのフォーマットでメトリックを報告し、各モニター・エレメントが単独の行で表示されます。 このグループには、以下の関数が含まれます。
  • MON_FORMAT_XML_COMPONENT_TIMES_BY_ROW
  • MON_FORMAT_XML_TIMES_BY_ROW
  • MON_FORMAT_XML_WAIT_TIMES_BY_ROW
  • MON_FORMAT_XML_METRICS_BY_ROW
例えば、統計イベント・モニターから返される XML 文書 DETAILS_XML が、図 1 の最初の部分に示すようなものだったとします。 MON_FORMAT_XML_WAIT_TIMES_BY_ROW 関数を使用して DETAILS_XML の内容をフォーマット設定すると、出力はダイアグラムの下部に示す表のようになります。
図 1. モニター・データを含んだ XML ファイルをいずれかの MON_FORMAT_XML_* 関数で処理する. この例は、MON_FORMAT_XML_WAIT_TIMES_BY_ROW 関数を使用した場合を示しています。 待機時間のみが返され、wlm_queue_assignments_total など XML ファイルに含まれる他のメトリックは、この特定の関数によって除外されます。
XML が行指向フォーマットに変換される過程を示したプロセス・チャート。
METRIC_NAME                          TOTAL_TIME_VALUE     COUNT                PARENT_METRIC_NAME           
------------------------------------ -------------------- -------------------- -----------------------------
WLM_QUEUE_TIME_TOTAL                                    0                    0 TOTAL_WAIT_TIME              
FCM_TQ_RECV_WAIT_TIME                                   0                    0 FCM_RECV_WAIT_TIME           
FCM_MESSAGE_RECV_WAIT_TIME                              0                    0 FCM_RECV_WAIT_TIME           
FCM_TQ_SEND_WAIT_TIME                                   0                    0 FCM_SEND_WAIT_TIME           
FCM_MESSAGE_SEND_WAIT_TIME                              0                    0 FCM_SEND_WAIT_TIME           
AGENT_WAIT_TIME                                         0                    0 TOTAL_WAIT_TIME              
LOCK_WAIT_TIME                                          0                    0 TOTAL_WAIT_TIME              
DIRECT_READ_TIME                                        0                    0 TOTAL_WAIT_TIME              
DIRECT_WRITE_TIME                                       0                    0 TOTAL_WAIT_TIME              
LOG_BUFFER_WAIT_TIME                                    0                    0 TOTAL_WAIT_TIME              
LOG_DISK_WAIT_TIME                                      0                    0 TOTAL_WAIT_TIME              
       ⋮
返される列の数は、使用する具体的な関数によって異なります。 例えば、MON_FORMAT_XML_METRICS_BY_ROW は、以下のように 2 つの列を返します。1 つはメトリック名の列、もう 1 つはそれに対応する値の列です。
METRIC_NAME               VALUE
------------------------- --------------------
WLM_QUEUE_TIME_TOTAL                         0
WLM_QUEUE_ASSIGNMENTS_TOT                    0
FCM_TQ_RECV_WAIT_TIME                        0
FCM_MESSAGE_RECV_WAIT_TIM                    0
FCM_TQ_SEND_WAIT_TIME                        0
         ⋮
それに対して MON_FORMAT_XML_TIMES_BY_ROW は、以下のように 4 つの列を返します。
METRIC_NAME                    TOTAL_TIME_VALUE     COUNT      PARENT_METRIC_NAME     
------------------------------ -------------------- ---------- -----------------------
WLM_QUEUE_TIME_TOTAL                              0          0 TOTAL_WAIT_TIME        
FCM_TQ_RECV_WAIT_TIME                             0          0 FCM_RECV_WAIT_TIME     
FCM_MESSAGE_RECV_WAIT_TIME                        0          0 FCM_RECV_WAIT_TIME     
FCM_TQ_SEND_WAIT_TIME                             0          0 FCM_SEND_WAIT_TIME     
FCM_MESSAGE_SEND_WAIT_TIME                        0          0 FCM_SEND_WAIT_TIME     
          ⋮                                                                                              
MON_FORMAT_XML_* _BY_ROW 関数は、表示したいエレメントが分かっていないときに便利です。 例えば、CLPWORKLOAD というワークロードの待機時間モニター・エレメントの上位 10 エレメントを調べることもできます。 この情報を収集するには、DBSTATS (event_wlstats 論理データ・グループ) という統計イベント・モニターを作成します。表に書き込むようこのイベント・モニターをセットアップしたとすると、デフォルトで WLSTATS_DBSTATS という表の DETAILS_XML という列にメトリックが記録されます。 以下のように、イベント・モニターからの出力表にモニター・データを設定したら、MON_FORMAT_XML_WAIT_TIMES_BY_ROW 関数を使用する照会を構成することによって、調べたいモニター・エレメントを抽出できます。

SELECT SUBSTR(STATS.WORKLOAD_NAME,1,15) AS WORKLOAD_NAME,
       SUBSTR(METRICS.METRIC_NAME,1,30) AS METRIC_NAME, 
       SUM(METRICS.TOTAL_TIME_VALUE) AS TOTAL_TIME_VALUE
FROM   WLSTATS_DBSTATS AS STATS, 
       TABLE(MON_FORMAT_XML_WAIT_TIMES_BY_ROW(STATS.DETAILS_XML)) AS METRICS 
WHERE  WORKLOAD_NAME='CLPWORKLOAD' AND (PARENT_METRIC_NAME='TOTAL_WAIT_TIME')
GROUP  BY WORKLOAD_NAME,METRIC_NAME 
ORDER  BY TOTAL_TIME_VALUE DESC
FETCH FIRST 10 ROWS ONLY
要確認: 消費時間モニター・エレメントは、階層的に編成されています。 この例では、待機時間の二重カウントを避けるために、total_wait_time に累積されるモニター・エレメントのみを含めています (上記 SQL ステートメントの WHERE 節を参照)。 そうしないと、個別の待機時間をいくつも含んでいる total_wait_time 自体が結果に入ってしまうことになります。
この照会の結果は、例えば以下のような出力になります。
WORKLOAD_NAME   METRIC_NAME                    TOTAL_TIME_VALUE
--------------- ------------------------------ --------------------
CLPWORKLOAD     LOCK_WAIT_TIME                             15138541
CLPWORKLOAD     DIRECT_READ_TIME                            6116231
CLPWORKLOAD     POOL_READ_TIME                              6079458
CLPWORKLOAD     DIRECT_WRITE_TIME                            452627
CLPWORKLOAD     POOL_WRITE_TIME                              386208
CLPWORKLOAD     IPC_SEND_WAIT_TIME                           283172
CLPWORKLOAD     LOG_DISK_WAIT_TIME                           103888
CLPWORKLOAD     DIAGLOG_WRITE_WAIT_TIME                       78198
CLPWORKLOAD     IPC_RECV_WAIT_TIME                            15612
CLPWORKLOAD     TCPIP_SEND_WAIT_TIME                           3291

  10 record(s) selected.
注: MON_FORMAT_XML_*_BY_ROW 関数は、測定つまりメトリック を追跡するモニター・エレメントのみを返します。 これには、カウンターだけでなく、待機時間およびコンポーネント時間を追跡するモニター・エレメントも含まれます。 uow_id や activity_id など、XML 文書に含まれる非メトリック・モニター・エレメントは返しません。

XMLTABLE 関数を使用することによって、XML 文書に含まれる任意の エレメント (非メトリック・エレメントを含む) を表示できます。 ただし、最も頻繁に使用される非メトリック・モニター・エレメントは、MON_GET_UNIT_OF_WORK や MON_GET_CONNECTION など、MON_GET_* で始まるモニター関数で列として返されます。 XML をよくご存じない方は、これらの関数を使用して照会を作成したほうが、XMLTABLE 関数を使用して XML 文書からモニター・エレメントを抽出するよりも、速くて簡単かもしれません。

要約すると、次のようになります。非メトリック・モニター・エレメントを表示したい場合は、XMLTABLE 関数の代わりに MON_GET_* シリーズの表関数を使用したほうが望ましいことがあります。 メトリック・モニター・エレメントを表示したい場合は、MON_FORMAT_XML_*_BY_ROW 表関数がニーズに適していることがあります。

1 注: この一連のトピックでは、小文字の details_xml は XML 文書 details_xml を表します。 大文字の DETAILS_XML はリレーショナル表の DETAILS_XML という列を表し、そこには details_xml 文書が含まれます。