Db2的Activity event monitor在Db2 MPP V2上收集ROWS_INSERTED信息

注:本文不是讲解Db2 Activity event monitor,只是一个用法实践。要了解Activity event monitor,请参考 https://www.ibm.com/docs/en/db2/11.5?topic=events-activity-event-monitoring

环境

  • Red Hat Enterprise Linux release 8.8 (Ootpa)
  • Db2 MPP V2 11.5.8

准备

Activity event monitor

在Db2中创建一个Activity event monitor(其table所在的table space跨所有DB member):

create event monitor <XXX> for activities write to table
    activity (table IBM_RTMON.activity_<timestamp>)
    , activitystmt (table IBM_RTMON.activity_stmt_<timestamp>)
    , activitymetrics (table IBM_RTMON.activity_metrics_<timestamp>)
manualstart

其中:

  • activity :包含event信息
  • activity_stmt :包含statement信息
  • activity_metrics :包含metrics信息,如 ROWS_INSERTED

将其激活:

set event monitor <XXX> state 1

Table

创建table T1T2

create table bluadmin.t1(c1 int, c2 int);
create table bluadmin.t2(c1 int, c2 int);

T1 插入一些数据。

[db2inst1@dashmpp-head-0 - Db2wh ~]$ db2 "select count(*) from bluadmin.t1"

1
---------------------------------
                             160.

  1 record(s) selected.

Workload

假设对 T1T2 的DML操作都属于 SYSDEFAULTUSERWORKLOAD workload。

Alter workload SYSDEFAULTUSERWORKLOAD

alter workload SYSDEFAULTUSERWORKLOAD COLLECT ACTIVITY DATA ON COORDINATOR MEMBER WITH DETAILS

注:默认情况下,workload的activity不会被Activity event monitor收集。

可以查看 syscat.workloads 视图:

[db2inst1@dashmpp-head-0 - Db2wh ~]$ db2 "select workloadid, cast(workloadname as varchar(30)) as workloadname, collectactdata, collectactpartition from syscat.workloads order by workloadid"

WORKLOADID  WORKLOADNAME                   COLLECTACTDATA COLLECTACTPARTITION
----------- ------------------------------ -------------- -------------------
          1 SYSDEFAULTUSERWORKLOAD         D              C
          2 SYSDEFAULTADMWORKLOAD          D              C
          3 DSM_WORKLOAD                   N              C
          4 CONSOLE_WORKLOAD               N              C
          5 WL_0                           D              C
          6 WL_1                           D              C
......

COLLECTACTDATACOLLECTACTPARTITION 的解释,详见 https://www.ibm.com/docs/en/db2/11.5?topic=views-syscatworkloads

问题

清空表 T2 ,然后将 T1 的数据插入 T2

insert into bluadmin.t2 (select * from bluadmin.t1)

Activity event monitor会产生一个event,并在相应的table里产生一些数据。

先来看看 activity_stmt 表:

select partition_number, stmt_text, *
from ibm_rtmon.activity_stmt_1701671110833
where cast(stmt_text as varchar(100)) like 'insert into t2%';

注意:这里 like 条件不要写成 '%insert into t2%' ,否则把其它无关SQL(比如本条SQL也包含 insert into t2 )也查到了。

说明已经产生event了,然后再根据其信息比如 appl_id 来查找 activity_metrics 表:

select partition_number, rows_inserted, *
from ibm_rtmon.activity_metrics_<timestamp>
where appl_id = '<XXXXXX>'

在结果中只有1条记录,其 partition_number 为0,而 rows_inserted 也是0。

在这里插入图片描述

明明插入了160条记录,怎么在Activity event monitor产生的event里, rows_inserted 是0呢?

分析

这是因为,workload SYSDEFAULTUSERWORKLOADcollectactpartitionC ,也就是 ON COORDINATOR MEMBER ,所以 activity_metrics 表只产生了coordinator member所对应的那条记录,而在此member上实际并没有插入数据,所以 rows_inserted 是0。

解决方法

把workload SYSDEFAULTUSERWORKLOADcollectactpartition 改为 D ,也就是 ON ALL MEMBERS

alter workload SYSDEFAULTUSERWORKLOAD COLLECT ACTIVITY DATA ON ALL MEMBERS WITH DETAILS

然后查看 syscat.workloads ,确认修改成功:

[db2inst1@dashmpp-head-0 - Db2wh ~]$ db2 "select workloadid, cast(workloadname as varchar(30)) as workloadname, collectactdata, collectactpartition from syscat.workloads where workloadid = 1"

WORKLOADID  WORKLOADNAME                   COLLECTACTDATA COLLECTACTPARTITION
----------- ------------------------------ -------------- -------------------
          1 SYSDEFAULTUSERWORKLOAD         D              D

  1 record(s) selected.

现在,将 T2 表清空,再重新插入一些数据,这回在 activity_metrics 表里就会产生多条记录:

在这里插入图片描述

把各个member的 rows_inserted 值加起来,正好等于插入的数据总数160。

可见,要用 activity_metrics 表收集metrics,需要将对应的workload设置为 COLLECT ACTIVITY DATA ON ALL MEMBERS ,不能是 COLLECT ACTIVITY DATA ON COORDINATOR MEMBER ,否则只能收集到coordinator member上的metric。

其它

对于一条插入语句:

  • 若workload指定为 COLLECT ACTIVITY DATA ON COORDINATOR MEMBER ,则 activityactivity_stmtactivity_metrics 都只产生一条记录。
  • 若workload指定为 COLLECT ACTIVITY DATA ON ALL MEMBERS ,则 activityactivity_metrics 会产生多条记录,每个member对应一条记录。而 activity_stmt 只产生一条记录。

要收集 rows_inserted 信息,就要把workload指定为 COLLECT ACTIVITY DATA ON ALL MEMBERS ,同时,不能以 partition_number 作为三个table的连接条件。

正确做法是:

  • 如果只想要总的信息,则先把 activity_metrics 表里各个member的 rows_inserted 信息汇总起来,再和其它表join
  • 如果要看各个member的详细信息,则收集 activity_metrics 表里各个member的 rows_inserted 信息,再和其它表join

总之不要以 partition_number 作为和 activity_stmt table的连接条件,而只以 appl_iduow_idactivity_idactivity_secondary_id 作为连接条件。比如:

with m as (select appl_id, uow_id, activity_id, activity_secondary_id, sum(rows_inserted) as rows_inserted
    from ibm_rtmon.activity_metrics_<timestamp>
    group by appl_id, uow_id, activity_id, activity_secondary_id)
select s.stmt_text, m.rows_inserted
from ibm_rtmon.activity_<timestamp> a
join ibm_rtmon.activity_stmt_<timestamp> s
on a.appl_id = s.appl_id and a.uow_id = s.uow_id and a.activity_id = s.activity_id and a.activity_secondary_id = s.activity_secondary_id
join m
on a.appl_id = m.appl_id and a.uow_id = m.uow_id and a.activity_id = m.activity_id and a.activity_secondary_id = m.activity_secondary_id

运行结果如下:

在这里插入图片描述

activity 表的 details_xml 字段

activity 表有一个 details_xml 字段,里面包含了很多信息,比如 rows_inserted 。把workload设置为 COLLECT ACTIVITY DATA ON ALL MEMBERSactivity 表会为每个member产生一条记录,然后也可以从 details_xml 字段获取 rows_inserted ,每个member上获取的是各自的 rows_inserted 值。例如:

select a.partition_number, s.stmt_text, xml.rows_inserted from ibm_rtmon.activity_<timestamp> a
join ibm_rtmon.activity_stmt_<timestamp> s
on a.appl_id = s.appl_id and a.uow_id = s.uow_id and a.activity_id = s.activity_id and a.activity_secondary_id = s.activity_secondary_id
, XMLTABLE
		(
		   XMLNAMESPACES( default 'http://www.ibm.com/xmlns/prod/db2/mon' ),
		   '$metrics/activity_metrics' PASSING XMLPARSE( DOCUMENT a.details_xml ) as "metrics" COLUMNS
		   ROWS_INSERTED BIGINT PATH'rows_inserted'
	   ) as xml
where stmt_text like 'insert into t2%';

在这里插入图片描述

可见,各个member上的 rows_inserted 总和也是160。

参考

  • https://www.ibm.com/docs/en/db2/11.5?topic=views-syscatworkloads
  • https://www.ibm.com/docs/en/db2/11.5?topic=statements-alter-workload#sdx-synid_alter-collect-activity-data-clause
  • https://www.ibm.com/docs/en/db2/11.5?topic=events-activity-event-monitoring

相关推荐

  1. db2 export

    2023-12-08 08:54:03       29 阅读
  2. db2实例环境变量

    2023-12-08 08:54:03       28 阅读
  3. DB2】运行preprpnode时候报错

    2023-12-08 08:54:03       53 阅读
  4. db2数据仓库集群搭建

    2023-12-08 08:54:03       41 阅读
  5. DB2】Maxlocks和防止锁升级

    2023-12-08 08:54:03       57 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-08 08:54:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-08 08:54:03       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-08 08:54:03       82 阅读
  4. Python语言-面向对象

    2023-12-08 08:54:03       91 阅读

热门阅读

  1. C#使用Matrix类对Dicom图像的放缩

    2023-12-08 08:54:03       67 阅读
  2. LeetCode-15. 三数之和

    2023-12-08 08:54:03       64 阅读
  3. ElasticSearch中的分析器是什么?

    2023-12-08 08:54:03       58 阅读
  4. R语言进行正态分布检验

    2023-12-08 08:54:03       61 阅读
  5. Mongodb中的ObjectId

    2023-12-08 08:54:03       54 阅读
  6. 看图学源码之 CopyOnWriteArraySet源码分析

    2023-12-08 08:54:03       47 阅读
  7. ZooKeeper学习一

    2023-12-08 08:54:03       46 阅读
  8. iSoftBook、Jira、GitLab、TAPT研发管理平台的比较

    2023-12-08 08:54:03       71 阅读
  9. Caddy服务器快速上手

    2023-12-08 08:54:03       57 阅读
  10. 【Angular开发】Angular:2023年最佳实践

    2023-12-08 08:54:03       57 阅读
  11. 用c#实现记事本的功能

    2023-12-08 08:54:03       46 阅读
  12. KVM迁移

    2023-12-08 08:54:03       40 阅读
  13. vue3在table里使用elementUI的form表单验证

    2023-12-08 08:54:03       51 阅读