关键字:人大金仓、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 2) 查询处理器数 cat /proc/cpuinfo |grep 'processor' |wc –l 3) 查询核心数 cat /proc/cpuinfo | grep "cpu core" | uniq | wc –l 4) 连接ksql执行命令: ./ksql -p 54322 -U system kingbase 5) 查询SGA系统全局区: select pg_size_pretty(sum(size+pg_stat_get_dsm_size)) from pg_stat_shmem, pg_stat_get_dsm_size(); 6) 查询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 现在存在重复显示过滤的bug,下图为本库采集 下图为跨库采集test库 |
1.2 测试经验及注意事项
1、进行跨库收集需要开启sys_kwr.database新增参数,对应报告内容中的实例信息显示验证,需要注意的是,该GUC参数并不是对收集报告的权限进行扩展,而是把权限转移到某个库上,设置后只允许该库进行ksh报告的收集操作
2、KSH信息的收集要求业务的执行时间不能过短,因此在收集操作过程中,尽量为操作环境添加一定的测试压力,这样可以使大部分的执行语句被捕获。




