关键字:人大金仓、KingbaseES
1、功能描述
1.1功能描述及使用示例
对比Oracle ASH报告,该特性需求指在KSH中对以下几个子报告做兼容:
- 数据库和版本信息
- 主机和实例环境
- 采样信息
- Top Service/Module
- Top DB Objects
提供以上子报告的显示功能,可以更直观的获取操作的实例环境配置,版本信息,操作对象执行业务的总任务占比,以及进程类型,操作库等更详细的信息供分析性能问题和测试数据。
KSH 相关GUC参数:
track_activities:跟踪活动会话的等待事件、执行SQL、状态等,默认:on
sys_stat_statements.max:设置 sys_stat_statement 跟踪的最大语句数,默认:5000
sys_kwr.collect_ksh:启用或禁用 sys_ksh 数据收集,默认:关闭
sys_kwr.ringbuf_size:设置 sys_ksh ringbuf 大小,在内存中可以存多少条数据,默认:100000
sys_kwr.history_days:设置最大的 sys_ksh 历史数据存储,在磁盘上存储的时间,默认:8天
sys_kwr.language:KSH 报告展示中文/英语信息,默认:中文
新增参数:
sys_kwr.database:配置按库展示,只能在该参数设置的库上进行ksh报告收集,默认:kingbase
3.1.1 GUC参数配置
1、普遍收集场景
①在kingbase.conf中配置guc参数
shared_preload_libraries = 'liboracle_parser, sys_stat_statements, sys_kwr'
sys_stat_statements.track = 'top' # default = 'none'
sys_kwr.collect_ksh = on # default = off
上述参数含义:
sys_stat_statements.track:设置 sys_stat_statements.track 控制哪个语句可以被该模块跟踪,声明 'top' 来跟踪顶级(直接通过客户端发出)的语句,'all' 跟踪嵌套的语句,'none' 禁用语句状态收集。建议使用 'top'。
sys_kwr.collect_ksh:启用或禁用 sys_ksh 数据收集,默认:关闭
②ksql连接数据库
./ksql –p 54321 –U system kingbase
③创建sys_kwr扩展和快照1
Create extension sys_kwr;
Select *from perf.kwr_snapshot();
④执行以下业务之一:
业务1:tpcc 10仓10并发 2min(可观察较完整信息)
业务2:./kbbench –p 54321 –Usystem –i –s【num】 【database】
【注】数据量为num*100000,database指定灌数库
进行压力测试:./kbbench –p 54321 –U system –r –c2 –j2 –P1 –M prepared –d 【database】
⑤创建快照2
Select * from perf.create_snapshot();
⑥收集ksh报告
1)根据时间段进行收集
Select * from perf.ksh_report((CURRENT_TIMESTAMP - '00:15:00'::interval,10,0,'text', 'database'));
函数定义:Select * from perf.ksh_report({start_ts}, {duration}, {slot_width}, {format},{database});
start_ts: 报告开始时间,默认:当前时间-15分钟
duration: 报告时长,默认:15分钟,最大不超过60
slot_width: 报告最小区间,输入0时系统自动计算合适的宽度,默认:0
format: 报告生成格式,可选择 ’html’和’text’两种格式,默认 TEXT 格式
database:指定收集某个库的信息
2)根据快照进行收集
Select * from perf.ksh_report_by_snapshots(1,2,0, 'text', 'database');
Select * from perf.ksh_report_by_snapshots({start_snapid},{end_snapid},{slot_width}, {format},{database});
start_snapid: 起始快照号
end_snapid: 结束快照号
slot_width: 报告最小区间,输入0时系统自动计算合适的宽度,默认:0
format: 报告生成格式,可选择 ’html’和’text’两种格式,默认 TEXT 格式
database:指定收集某个库的信息
收集离线报告
SELECT * FROM perf.ksh_report_to_file_by_snapshots({start_snapid}, {end_snapid}, {file_path}, {format}, {slot_width},{database});含义同上
3.1.2 实例信息部分
报告头信息:
根据以下方法进行系统信息查询
连接ksql执行命令
./ksql -p 54322 -U system kingbase
1)采集信息库
select current_database();
2)查询发行版本
select version();
3)获取kingbase构建版本号
select * from build_version();
4)收集报告,与报告内容进行对比
3.1.3 采样信息报告
执行3.1.1中业务后:
1)查询报告时间范围内采样次数Sample Count
显式创建事务
begin;
select * from perf.ksh_report_by_snapshots(1,2);
select count(*) from ksh_result ;
commit;
2)通过计算会话时间,查询快照采样频率
Elapsed Time = end_time - begin_time
Avg Active Sessions = Sample Count / Elapsed Time
对比报告中内容
3)对照报告中内容
3.1.4 CPU内存信息
1、查询系统信息
1)查询处理器型号
cat /proc/cpuinfo |grep 'model name' |uniq
- 查询处理器数
cat /proc/cpuinfo |grep 'processor' |wc –l
- 查询核心数
cat /proc/cpuinfo | grep "cpu core" | uniq | wc –l
- 连接ksql执行命令:
./ksql -p 54322 -U system kingbase
- 查询SGA系统全局区:
select pg_size_pretty(sum(size+pg_stat_get_dsm_size)) from pg_stat_shmem, pg_stat_get_dsm_size();
- 查询ksh缓冲区大小
select * from pg_stat_shmem where name = 'sys_ksh';
7)对比报告中内容
3.1.5 Top 服务/模块
收集报告后,在top服务/模块部分会显示指定时间内,产生的服务类型,服务触发的事件名称,活动占比等
下表中显示了ksql和kbbench两个client访问创建的client backend服务,随数据库自启动的清理服务autovacuum和后台进程服务background worker
3.1.6 Top数据库对象
收集报告后,在top数据库对象部分可以获取到业务执行所操作的表信息,表空间信息,事件类型名称,时间占比和平均会话数等,需要注意的是,当采集库和被采集库不是同一库时,对象名部分会显示为unknown
1.2 测试经验及注意事项
1、进行跨库收集需要开启sys_kwr.database新增参数,对应报告内容中的实例信息显示验证,需要注意的是,该GUC参数并不是对收集报告的权限进行扩展,而是把权限转移到某个库上,设置后只允许该库进行ksh报告的收集操作
2、KSH信息的收集要求业务的执行时间不能过短,因此在收集操作过程中,尽量为操作环境添加一定的测试压力,这样可以使大部分的执行语句被捕获。