关键字:workload、人大金仓、KingbaseES
ys_workload.sys_fdw_log
sys_workload.sys_workload_statistics_snapshot
sys_workload.sys_workload_log
sys_workload.sys_workload_statistics
workload_capture_init
- 创建一个插件和server
CREATE EXTENSION IF NOT EXISTS file_fdw; /* 对外协商 */
CREATE SERVER IF NOT EXISTS sys_fdw_log FOREIGN DATA WRAPPER file_fdw; /* 对外协商 */
- 创建外部表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 函数
- 从外部表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
- 获取不重复的session_id
SELECT count(distinct session_id)
- 会话级特征 GROUP BY session_typeid
- “会话特征汇总”里的总事务数计算是需要注意的:
- 事务块的vtransaction_id具有唯一性
- 单语句事务的vtransaction_id格式是 ‘%/0’,
- 同一个会话里的单语句事务的vtransaction_id是相同的
- 单语句和非单语句的事务数总和就是“事务总数量”
- 事务级特征 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 限制获取一个事务
- 语句级特征
ORDER BY statement_typeid
- 表级特征
ORDER BY relname
在线报告内容:
“会话特征汇总信息”里罗列所有会话类型ID,之后根据每一个会话类型给出“事务级特征信息”和“语句级特征信息”;
枚举完全部会话类型后,显示“表级特征信息”
“表级特征信息-sys_statistic”和“表级特征信息-sys_attribute”只在*.log里展示,在线报告里不显示
路径:data/sys_log
内容:两个表通过过滤relid获取到的




