
今天讲解的是KingbaseES的性能调优工具。在我们日常管理数据库的时候经常会遇到数据库运行缓慢,查询响应时间长,系统资源占用过高这些问题。使用Kbbadger日志分析工具,动态性能视图,KWR快照报告,KSH报告能够帮助我们快速定位出问题,以及需要优化的方向。
一、性能调优工具概览
KingbaseES的性能调优工具体系就像一个完整的"健康检查系统",从不同维度帮助我们诊断数据库的运行状况:

1. kbbadger日志分析工具 - 您的"历史记录专家"
这是一个基于数据库日志的分析工具,能够将海量日志转化为直观的图形化报告。就像医生查看病历一样,它能帮您回顾数据库的"过往经历"。
2. 动态性能视图 - 您的"实时监控仪表盘"
这些视图实时展示数据库内部状态,包括SQL执行情况、等待事件、IO性能等关键指标,让您随时掌握数据库的"脉搏"。
3. KWR快照与报告 - 您的"定期体检报告"
- KWR报告:全面展示数据库性能指标
- KDDM报告:智能诊断并提供优化建议
- KWR DIFF报告:对比不同时期的性能差异
4. KSH报告 - 您的"急诊专家"
专门用于捕捉和分析突发性能问题,就像急诊科医生处理突发状况一样快速准确。
二、kbbadger:日志分析的利器
工具特点
kbbadger就像一位经验丰富的侦探,能从大量日志文件中提取关键信息:
- 生成美观的HTML报告,所有图表可缩放和下载
- 支持多种日志格式(syslog、stderr、csv、json)
- SQL查询自动高亮显示,便于阅读
实战应用
第一步:配置日志参数
sql
# 在kingbase.conf中配置
log_min_duration_statement = 0
log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d,remote=%h '
log_checkpoints = on
log_connections = on
log_disconnections = on
第二步:生成报告
bash
kbbadger ./sys_log/kingbase* -f stderr -J 12 -j 32
适用场景
- 其他性能工具无法使用时的备选方案
- 需要分析历史性能问题
- 低版本数据库不支持KWR时
温馨提示:日志分析会占用较多磁盘空间和系统资源,分析完成后记得及时关闭相关日志功能。
三、动态性能视图:实时监控的眼睛

视图分类
1. 实时状态视图 - 看"现在"
像sys_stat_activity这样的视图,告诉您此时此刻数据库在做什么:
sql
SELECT pid, wait_event, state, query, backend_type
FROM sys_stat_activity;
2. 累积统计视图 - 看"历史"
像sys_stat_database这样的视图,记录数据库运行以来的累积数据:
sql
SELECT datname, xact_commit, xact_rollback, tup_inserted
FROM sys_stat_database
WHERE datname = 'kingbase';
关键配置参数
为了获得完整的性能数据,建议启用以下参数:
sql
track_activities = on # 跟踪活动状态
track_counts = on # 跟踪对象统计
track_functions = 'all' # 跟踪函数执行
track_sql = on # 跟踪SQL时间模型
track_instance = on # 跟踪实例活动
track_io_timing = on # 跟踪IO时间
sys_stat_statements.track = 'top' # 跟踪TOP SQL
统计信息管理
清理统计信息:
sql
-- 清理全部共享对象统计
SELECT sys_stat_reset_shared('all');
-- 清理当前库的对象统计
SELECT sys_stat_reset();
-- 清理SQL统计
SELECT sys_stat_statements_reset();
四、数据库时间模型:性能分析的核心
什么是数据库时间?
简单来说,数据库时间就是服务器响应客户端请求所花费的总时间。它由两部分组成:
数据库时间 = 非空闲等待时间 + CPU时间
多维度时间分解
1. 按SQL报文分解
了解不同类型报文(Parse、Bind、Execute等)的耗时分布
2. 按SQL语句类型分解
识别哪类SQL(SELECT、INSERT、UPDATE等)最耗时
3. 按等待事件分解
找出导致性能瓶颈的关键等待事件
4. 按关键活动分解
分析Buffer操作、事务提交等关键活动的耗时
5. 按TOP SQL分解
定位最消耗资源的具体SQL语句
五、KWR快照与报告:定期体检的好帮手
快速上手指南
步骤1:创建KWR插件
sql
CREATE EXTENSION sys_kwr;
步骤2:配置自动快照
sql
sys_kwr.enable = on
sys_kwr.database = 'kingbase'
sys_kwr.interval = 60 # 每小时自动快照
步骤3:生成报告
sql
-- 生成KWR报告
SELECT * FROM perf.kwr_report(1, 2, 'html');
-- 生成KDDM诊断报告
SELECT * FROM perf.kddm_report(1, 2, 'html');
-- 生成对比报告
SELECT * FROM perf.kwr_diff_report(1, 2, 3, 4);
KDDM:您的智能优化顾问
KDDM报告最大的特点是能够自动诊断问题并提供优化建议。它就像一位经验丰富的DBA,帮您分析性能瓶颈并给出解决方案。
典型优化案例:
假设KDDM发现WALWriteLock等待事件占用了73.62%的数据库时间,它会建议:
sql
commit_delay = 10
commit_siblings = 16
synchronous_commit = off
full_page_writes = off
应用这些建议后,再次测试,WALWriteLock占比降至57.33%,性能显著提升!
六、KSH报告:突发问题的急救专家
KWR vs KSH
| 特性 | KWR | KSH |
|---|---|---|
| 统计方式 | 累积式 | 采样式 |
| 时间粒度 | 1小时 | 1秒 |
| 适用场景 | 整体趋势分析 | 突发问题诊断 |
| 数据保留 | 8天 | 实时1小时+历史采样 |
使用场景
当您遇到这些情况时,KSH是最佳选择:
- 系统突然变慢,但很快恢复
- 某个时刻出现大量锁等待
- 需要秒级精度的性能分析
生成KSH报告
sql
-- 按时间区间生成
SELECT * FROM perf.ksh_report();
-- 按快照号生成
SELECT * FROM perf.ksh_report_by_snapshots(3, 4);
报告解读技巧
关键指标解释:
- 平均活跃会话数:平均每秒有多少会话在活动
- 每CPU平均活跃会话数:CPU忙碌程度的指标
- 事件占比:某个事件占同类事件的比例
- 活动占比:某个事件占全部采样的比例
七、总结

KingbaseES提供了完整的性能调优工具链:kbbadger 用于日志分析和历史问题追溯,动态性能视图 提供实时监控能力,KWR报告 适合定期性能评估和趋势分析,KDDM报告 能智能诊断并给出优化建议,KSH报告则专注于秒级精度的突发问题定位。这些工具相互配合,从不同维度和时间粒度帮助DBA全面掌握数据库健康状况,快速定位性能瓶颈,实现精准调优,是数据库运维不可或缺的"健康管理系统"。