用于将 XML 监视器信息作为格式化文本来查看的界面
XQuery 提供了一个功能强大并且灵活的界面来查询和处理 XML 数据。但是,有时候您可能想采用基于文本的格式来查看元素数据。根据您的需要,可以采用面向列的格式或者面向行的格式来查看 XML 文档中所包含的监视元素。如果您知道要查看哪些监视元素,那么采用面向列的格式很有用。如果您事先不知道要检查哪些监视元素(例如,当您想查看最靠前的五种类型的等待时间时),那么采用面向行的格式很有用。接下来的章节描述了您可以采用两种方式将 XML 文档中所包含的监视数据作为格式化文本来查看。
查看采用面向列的格式的监视元素
XMLTABLE 表函数将 XML 文档作为输入并将它转换为关系表,以便所选择的每个 XML 文档元素都显示为一列。如果您知道要显示哪些监视元素,那么此方法很有用。例如,假定您已经创建了一个称为 DBSTATS 的统计事件监视器,用来收集 event_scstats 逻辑数据组中的信息。对此事件监视器进行了定义,以将其输出写入到表,且缺省情况下,输出表名为 SCSTATS_DBSTATS。 (请参阅 event_scstats 逻辑数据组,以了解有关与此逻辑数据组相关联的监视元素的更多信息。)此逻辑组中的监视元素包括 details_xml,它实际上是一个 XML 文档,它本身包含组成 system_metrics 监视元素的指标。(请参阅 system_metrics,以了解有关与 system_metrics 监视元素相关联的监视元素的更多信息。)要查看 details_xml 中包含的特定 system_metrics 监视元素(例如,rows_returned、total_section_time 或 total_cpu_time),可以使用 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.在此实例中,前三列将直接显示在由统计事件监视器生成的 SCSTATS_DBSTATS 表中。最后三列是从该表的 DETAILS_XML 列中的 XML 文档抽取的指标监视元素。有关使用 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

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
⋮
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
⋮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
⋮
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 ONLYWORKLOAD_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.可以使用 XMLTABLE 函数来查看 XML 文档中包含的任何元素(包括非指标元素在内)。但是,最常用的非指标监视元素是由以 MON_GET_* 开头的监视函数(例如,MON_GET_UNIT_OF_WORK 或 MON_GET_CONNECTION)以列的形式返回的。如果不熟悉 XML,那么您可能会发现使用这些函数来创建查询,比使用 XMLTABLE 函数从 XML 文档中抽取监视元素更快并且更容易。
总结:如果您希望查看非指标监视元素,那么可能可以将表函数的 MON_GET_* 系列作为 XMLTABLE 函数的良好替代者。如果您希望查看指标监视元素,那么 MON_FORMAT_XML_*_BY_ROW 表函数可能会满足您的需要。