暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

人大金仓KingbaseES中workload1.0模块学习总结

数据猿 2023-11-09
287


关键字:workload、人大金仓、KingbaseES

  1. 表结构介绍

ys_workload.sys_fdw_log

sys_workload.sys_workload_statistics_snapshot

sys_workload.sys_workload_log

sys_workload.sys_workload_statistics

  1. 代码流程介绍

workload_capture_init

  1. 创建一个插件和server

CREATE EXTENSION IF NOT EXISTS file_fdw; /* 对外协商 */

CREATE SERVER IF NOT EXISTS sys_fdw_log FOREIGN DATA WRAPPER file_fdw; /* 对外协商 */

  1. 创建外部表sys_workload.sys_fdw_log 关联日志

3. 在sys_log目录下产生两个文件

sys_workload_2023-01-09_161439.csv 记录执行的SQL语句

sys_workload_2023-01-09_161439.log 记录一些日志 --在创建插件之前

4. 创建sys_workload.sys_workload_statistics_snapshot 统计信息快照表,即函数调用开始时的pg_stat_user_tables数据(每个用户表的统计数据)

---- 在stop里用来作为减数判断两步操作中的差值

workload_capture_stop

测试用例:

create extension sys_workload_profile;

select workload_capture_init();

drop table t1;

create table t1(a int);

insert into t1 values(123);

select * from t1;

select workload_capture_stop();

下面的图片是执行 workload_capture_stop函数过程中

0. 创建插件

CREATE EXTENSION IF NOT EXISTS sys_trgm; --为步骤5中的 similarity 函数

  1. 从外部表sys_workload.sys_fdw_log提取日志到转储表sys_workload.sys_workload_log

一个视图一个session_id

virtual_transcation_id的格式为 */* 其中第一个* 是一个视图一个值

Duration 是语句执行时间,单位是 ms

query是执行的SQL语句 显示顺序是按照执行顺序来的

===以下都是对转储表进行的操作

处理语句类型

2.循环转储表,常量替换,计算statement_typeid -- md5(query_stmt)

报告里,语句级特征信息的过滤条件

处理事务类型

3.计算 transaction_typeid -- md5(statement_typeid)

仅对部分进行single statement transaction 过滤条件: vtransaction_id LIKE '%/0' 单SQL语句

报告里,事务级特征信息的过滤条件

4-0 获取到一个可用的临时表名

4.根据 sys_workload.sys_workload_log 的vtransaction_id字段分组,产生临时表

vtransaction_id

typeid

基于转储表创建临时表

-- 过滤条件与3中的正好相反 vtransaction_id NOT LIKE ''%%/0'

每个vtransaction_id只有一行,把statement_typeid拼接在一起计算MD5,作为typeid的值。 -- md5(string_agg(distinct statement_typeid, '','' ORDER BY statement_typeid))

创建索引;

用临时表的typeid更新sys_workload.sys_workload_log的transaction_typeid字段

条件是sys_workload_log.vtransaction_id = 临时表.vtransaction_id

处理会话类型

5.根据sys_workload.sys_workload_log的session_id字段分组,产生临时表

因为是根据session_id字段分组,所以在临时表中,每个session_id的记录只有一行。

把transaction_typeid拼接在一起作为trans_agg。

--string_agg(distinct transaction_typeid, '','' ORDER BY transaction_typeid) GROUP BY session_id

再把临时表中trans_agg字段相似度达到80%的所有行,typeid更新为同一个值。

--WHERE typeid IS NULL AND similarity($2, trans_agg) >= 0.8

最后用临时表的typeid字段值来更新sys_workload_log表的session_typeid字段,条件是两个表的session_id相等。 处理会话类型

6. 创建临时表,查询pg_stat_user_tables数据,从中去掉

sys_workload.sys_workload_statistics_snapshot的全部数据,保存在临时表中

7.创建sys_workload.sys_workload_statistics表,和上面的临时表关联查询,保存init和stop之间表的统计信息。 临时表信息 - init时的快照表信息

workload_analyze_report

  1. 获取不重复的session_id

SELECT count(distinct session_id)

  1. 会话级特征 GROUP BY session_typeid
  • “会话特征汇总”里的总事务数计算是需要注意的:
  • 事务块的vtransaction_id具有唯一性
  • 单语句事务的vtransaction_id格式是 ‘%/0’,
  • 同一个会话里的单语句事务的vtransaction_id是相同的
  • 单语句和非单语句的事务数总和就是“事务总数量”
  1. 事务级特征 GROUP BY transaction_typeid
  • “执行次数”的计算与事务总数量的计算相同
  • 语句序列的获取需要注意:
  • 每一个transaction_typeid都有可能同时包含 block trans (vtransaction_id NOT LIKE ''%/0'') 和 noblock trans (vtransaction_id LIKE ''%/0''),其中 block trans 都是唯一的,但是 noblock trans 有可能是不相同的 == 需要的是在当前 transaction_typeid 对应的事务
  • 根据 group by vtransaction_id limit 1 限制获取一个事务
  1. 语句级特征

ORDER BY statement_typeid

  1. 表级特征

ORDER BY relname

在线报告内容:

报告

“会话特征汇总信息”里罗列所有会话类型ID,之后根据每一个会话类型给出“事务级特征信息”和“语句级特征信息”;

枚举完全部会话类型后,显示“表级特征信息”

“表级特征信息-sys_statistic”和“表级特征信息-sys_attribute”只在*.log里展示,在线报告里不显示

路径:data/sys_log

内容:两个表通过过滤relid获取到的


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论