1.登录kingbase 数据库去执行
ksql -d kingbase -U system
2.必须要插件sys_kwr加载
v9 已经把ksh合并到kwr插件里面了,没有单独的ksh插件
shared_preload_libraries = 'sys_stat_statements, sys_kwr'
3.开启基础统计
track_activities = on
track_io_timing = on
track_instance = on
sys_stat_statements.track = top
sys_stat_statements.max = 10000
4.配置KWR基础
sys_kwr.enable = on
5.KSH核心开关
sys_kwr.collect_ksh = on # 开启KSH采样,默认off
sys_kwr.ringbuf_size = 100000 # 内存环形缓冲区条数,默认10w
sys_kwr.ksh_sampling_interval = 1000 # 采样间隔,单位ms,默认1000=1秒一次
sys_kwr.ksh_disk_filter_ratio = 10 # 落盘比例,10代表10条采样落1条;填1=全部落盘(开销大)
sys_kwr.history_days = 8 # KSH历史数据保留天数
SELECT pg_reload_conf();
6. 生成 KSH 报告(适配 2.1.o2,public)
-- 最近 15 分钟、自动槽宽,直接看结果
SELECT perf.ksh_report();
-- 指定时间窗口,输出 HTML 文件
SELECT perf.ksh_report_to_file(
now() - interval '30 minutes', 30, 0,
'/home/kingbase/ksh_report.html', 'html');

-- 按 KWR 快照号区间生成
perf.ksh_report_by_snapshots(start_snapid, end_snapid, slot_width, format)
参数约定:
- start_ts:默认当前时间 − 15 分钟;
- duration:默认 15 分钟,最大 60 分钟;
- slot_width:为 0 时自动计算;
- format:支持 'html' 与 'text';
- database:不指定则生成全部数据库的报告;
- file_path:输出文件全路径,目标目录须提前存在且对数据库用户可写。
SELECT perf.ksh_report_by_snapshots(1, 2, 0, 'html');
--无负载时如何验证 KSH 能采到数据
KSH 采样的是活跃会话,空闲实例自然采不到内容。可人为制造一个等待事件再取报告:
SELECT sys_sleep(2);
SELECT perf.ksh_report();
7. 常用查询(抓瞬时卡顿,对标 ASH)
perf.session_history 视图 查看内存中的近期采样数据
perf.ksh_history 视图 查看已落盘的历史采样数据,23 个字段,含 ts、pid、user_name、app_name、db_name、state、event_type、event、cmd_type、phase、query_id、snap_id 等
perf.ksh_history_data 表 KSH 采样统计表,基于 sys_stat_activity
perf.ksh_statements 表 存储 SQL 语句文本,用于把 query_id 还原成 SQL
-- 最近10分钟活跃会话采样,TOP等待
SELECT ts,event_type,event,query_id,state,backend_type
FROM perf.session_history
WHERE ts >= now() - interval '10 minutes'
ORDER BY ts DESC;
按等待事件聚合,先看“卡在什么上”:
kingbase=# SELECT event_type, event, count(*) AS samples
kingbase-# FROM perf.ksh_history
kingbase-# WHERE ts >= current_timestamp - interval '30 minutes'
kingbase-# GROUP BY event_type, event
kingbase-# ORDER BY samples DESC
kingbase-# LIMIT 20;
event_type | event | samples
------------+--------------------+---------
Activity | WalSenderMain | 246
OnCPU | CPU or Wait On CPU | 8
(2 行记录)
按会话下钻,看“谁在等、等到哪一步”:
SELECT ts, pid, user_name, app_name, db_name, state,
event_type, event, cmd_type, phase, query_id
FROM perf.ksh_history
WHERE ts >= current_timestamp - interval '30 minutes'
ORDER BY ts DESC
LIMIT 100;
kingbase=# SELECT ts, pid, user_name, app_name, db_name, state,
kingbase-# event_type, event, cmd_type, phase, query_id
kingbase-# FROM perf.ksh_history
kingbase-# WHERE ts >= current_timestamp - interval '30 minutes'
kingbase-# ORDER BY ts DESC
kingbase-# LIMIT 100;
ts | pid | user_name | app_name | db_name | state | event_type | event | cmd_type | phase | query_id
-------------------------------+--------+-----------+-----------------+----------+---------+------------+--------------------+----------+---------+---------------------
2026-10-30 16:49:46.002684+08 | 27482 | esrep | node2 | | running | Activity | WalSenderMain | unknown | unknown | 0
2026-10-30 16:49:41.002855+08 | 27482 | esrep | node2 | | running | Activity | WalSenderMain | unknown | unknown | 0
2026-10-30 16:49:36.002709+08 | 27482 | esrep | node2 | | running | Activity | WalSenderMain | unknown | unknown | 0
2026-10-30 16:49:31.002826+08 | 27482 | esrep | node2 | | running | Activity | WalSenderMain | unknown | unknown | 0
2026-10-30 16:49:26.002485+08 | 27482 | esrep | node2 | | running | Activity | WalSenderMain | unknown | unknown | 0
2026-10-30 16:49:21.002536+08 | 27482 | esrep | node2 | | running | Activity | WalSenderMain | unknown | unknown | 0
2026-10-30 16:49:16.002670+08 | 27482 | esrep | node2 | | running | Activity | WalSenderMain | unknown | unknown | 0
2026-10-30 16:49:11.003206+08 | 27483 | esrep | node3 | | running | Activity | WalSenderMain | unknown | unknown | 0
2026-10-30 16:49:06.002760+08 | 27483 | esrep | node3 | | running | Activity | WalSenderMain | unknown | unknown | 0
2026-10-30 16:49:01.002675+08 | 27483 | esrep | node3 | | running | Activity | WalSenderMain | unknown | unknown | 0
2026-10-30 16:48:56.002920+08 | 27483 | esrep | node3 | | running | Activity | WalSenderMain | unknown | unknown | 0
2026-10-30 16:48:51.003099+08 | 27483 | esrep | node3 | | running | Activity | WalSenderMain | unknown | unknown | 0
2026-10-30 16:48:46.002505+08 | 126211 | esrep | internal_rwcmgr | esrep | running | OnCPU | CPU or Wait On CPU | select | plan | 866170851240868677
2026-10-30 16:48:42.002265+08 | 27482 | esrep | node2 | | running | Activity | WalSenderMain | unknown | unknown | 0
2026-10-30 16:48:37.002155+08 | 27482 | esrep | node2 | | running | Activity | WalSenderMain | unknown | unknown | 0
2026-10-30 16:48:32.003070+08 | 27482 | esrep | node2 | | running | Activity | WalSenderMain | unknown | unknown | 0
2026-10-30 16:48:27.002573+08 | 27482 | esrep | node2 | | running | Activity | WalSenderMain | unknown | unknown | 0
2026-10-30 16:48:22.002751+08 | 27482 | esrep | node2 | | running | Activity | WalSenderMain | unknown | unknown | 0
2026-10-30 16:48:17.002582+08 | 27483 | esrep | node3 | | running | Activity | WalSenderMain | unknown | unknown | 0
2026-10-30 16:48:12.002265+08 | 27483 | esrep | node3 | | running | Activity | WalSenderMain | unknown | unknown | 0
2026-10-30 16:48:07.003116+08 | 27483 | esrep | node3 | | running | Activity | WalSenderMain | unknown | unknown | 0
2026-10-30 16:48:02.003140+08 | 27483 | esrep | node3 | | running | Activity | WalSenderMain | unknown | unknown | 0
2026-10-30 16:47:58.002921+08 | 27464 | system | | kingbase | running | OnCPU | CPU or Wait On CPU | select | unknown | 6472529144300561797
2026-10-30 16:47:53.003057+08 | 27482 | esrep | node2 | | running | Activity | WalSenderMain | unknown | unknown | 0
2026-10-30 16:47:48.003181+08 | 27482 | esrep | node2 | | running | Activity | WalSenderMain | unknown | unknown | 0
2026-10-30 16:47:43.002856+08 | 27482 | esrep | node2 | | running | Activity | WalSenderMain | unknown | unknown | 0
2026-10-30 16:47:38.002636+08 | 27482 | esrep | node2 | | running | Activity | WalSenderMain | unknown | unknown | 0
2026-10-30 16:47:33.002655+08 | 27482 | esrep | node2 | | running | Activity | WalSenderMain | unknown | unknown | 0
2026-10-30 16:47:28.002463+08 | 27482 | esrep | node2 | | running | Activity | WalSenderMain | unknown | unknown | 0
2026-10-30 16:47:23.002368+08 | 27483 | esrep | node3 | | running | Activity | WalSenderMain | unknown | unknown | 0
2026-10-30 16:47:19.003055+08 | 27482 | esrep | node2 | | running | Activity | WalSenderMain | unknown | unknown | 0
2026-10-30 16:47:14.002252+08 | 27482 | esrep | node2 | | running | Activity | WalSenderMain | unknown | unknown | 0
2026-10-30 16:47:09.002823+08 | 27482 | esrep | node2 | | running | Activity | WalSenderMain | unknown | unknown | 0
2026-10-30 16:47:04.002264+08 | 27482 | esrep | node2 | | running | Activity | WalSenderMain | unknown | unknown | 0
2026-10-30 16:46:59.002283+08 | 27482 | esrep | node2 | | running | Activity | WalSenderMain | unknown | unknown | 0
2026-10-30 16:46:54.002399+08 | 27482 | esrep | node2 | | running | Activity | WalSenderMain | unknown | unknown | 0
2026-10-30 16:46:49.003124+08 | 27482 | esrep | node2 | | running | Activity | WalSenderMain | unknown | unknown | 0
2026-10-30 16:46:44.002323+08 | 27482 | esrep | node2 | | running | Activity | WalSenderMain | unknown | unknown | 0
2026-10-30 16:46:39.002419+08 | 27482 | esrep | node2 | | running | Activity | WalSenderMain | unknown | unknown | 0
2026-10-30 16:46:34.002385+08 | 27482 | esrep | node2 | | running | Activity | WalSenderMain | unknown | unknown | 0
2026-10-30 16:46:29.002872+08 | 27482 | esrep | node2 | | running | Activity | WalSenderMain | unknown | unknown | 0
...
本文详解Kingbase V9中KSH(Kingbase Session History)活动会话历史的启用与使用方法,涵盖插件加载(sys_kwr)、核心参数配置(如collect_ksh、sampling_interval、ringbuf_size)、统计开关设置、KWR集成机制,以及KSH报告生成(ksh_report、ksh_report_to_file)和常用查询视图(perf.session_history、perf.ksh_history)。内容聚焦数据库性能诊断能力构建,对标Oracle ASH,适用于DBA进行实时/历史会话级性能分析。
1821

被折叠的 条评论
为什么被折叠?



