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

2023-12-05 10:20

本文主要是介绍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 tableactivity (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              C2 SYSDEFAULTADMWORKLOAD          D              C3 DSM_WORKLOAD                   N              C4 CONSOLE_WORKLOAD               N              C5 WL_0                           D              C6 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              D1 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_insertedfrom 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" COLUMNSROWS_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

这篇关于Db2的Activity event monitor在Db2 MPP V2上收集ROWS_INSERTED信息的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/457163

相关文章

通过高德api查询所有店铺地址信息

通过高德api查询所有店铺地址电话信息 需求:通过高德api查询所有店铺地址信息需求分析具体实现1、申请高德appkey2、下载types city 字典值3、具体代码调用 需求:通过高德api查询所有店铺地址信息 需求分析 查询现有高德api发现现有接口关键字搜索API服务地址: https://developer.amap.com/api/webservice/gui

BD错误集锦7——在集成Spring MVC + MyBtis时使用c3p0作为数据库时报错Method com/mchange/v2/c3p0/impl/NewProxyPreparedStatem

异常信息如下: Type Exception ReportMessage Handler dispatch failed; nested exception is java.lang.AbstractMethodError: Method com/mchange/v2/c3p0/impl/NewProxyPreparedStatement.isClosed()Z is abstractDescr

XMG 重写- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event方法

//重写这个方法,来完成一些指定的事件。比如说按钮被遮到下面了,但是我想让点击到这块区域的时候让按钮去相应点击 - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {     // 当前坐标系上的点转换到按钮上的点     CGPoint btnP = [self convertPoint:point toVi

ORACLE 、达梦 数据库查询指定库指定表的索引信息

在Oracle数据库中,索引是一种关键的性能优化工具,通过它可以加快数据检索速度。在本文中,我们将深入探讨如何详细查询指定表的索引信息,以及如何利用系统视图和SQL查询来获取这些信息。 索引在数据库中的重要性 索引是一种数据结构,用于加快数据库表中数据的检索速度。它类似于书籍的目录,可以帮助数据库引擎快速定位数据行,特别是在大型数据集合下,其作用尤为显著。 查询指定表的索引信息 在Orac

Sublime Text相关资料收集

前端开发工具技巧介绍——Sublime篇:http://www.imooc.com/learn/40 Package Control:https://sublime.wbond.net/ Sublime Text全程指南:http://zh.lucida.me/blog/sublime-text-complete-guide/ Emmet Documentation:http://d

滴滴插件化框架VirtualAPK原理解析(一)之插件Activity管理

上周末,滴滴与360都开源了各自的插件化框架,VirtualAPK与RePlugin,作为一个插件化方面的狂热研究者,在周末就迫不及待的下载了Virtualapk框架来进行研究,本篇博客带来的是VirtualAPK原理解析的第一篇Activity管理,博客只是自己的理解,小弟才疏学浅,可能有很多理解不对的地方,欢迎各位大神指出。(看博客之前,请大家先下载VirtualVirtualAPKapk的项

基于协方差信息的Massive MIMO信道估计算法性能研究

1. 引言 随着移动互联网不断发展,人们对通信的速率和可靠性的要求越来越高[1]。目前第四代移动通信系统已经逐渐商用,研究人员开始着手研究下一代移动通信系统相关技术[2][3]。在下一代移动通信系统中要求下行速率达到10Gbps,这就要求我们使用更先进的技术和更宽的系统带宽。MIMO技术由于可以在不增加系统带宽和功率的前提下,成倍的提升系统容量和可靠性,已经广泛应用于各种无线通信系统中,但仅采用

nodejs基础教程-简单blog(8)--展示用户注册信息列表

本节课展示用户注册信息列表;当点击导航栏的“用户管理”浏览器跳转路由/admin/user 显示用户列表。 先上效果图; 开始 1,在layout.html模板中导航标签中设置路径; 2,新建文件 views/admin/user_index.html,在admin.js中设置user_index的路由为/admin/user;并查询数据库所有用户的信息 返回给前台users;

WinCE使用Webservice或者WCF与后台数据库SQL进行数据信息交互

之前使用过Webservice作为后台服务,WinCE上通过调用webservice来与后台数据库进行数据交互。 速度,稳定性都非常好。而且编程模块化,封装成为Webservice的两个函数即可解决数据库的增,删,查,改四个SQL语句的执行,因此编程非常高效。 有了这样的封装,程序员在编写程序时,主要精力放在逻辑上,分析业务知识上。从而降低程序员的技术门槛,提高编程效率,节省人力成本。