金仓 KES 性能优化工具 KWR 入门
大家好,这里是公众号 DBA学习之路,致力于分享数据库领域相关知识。
@TOC
前言
数据库性能是应用系统高效运行的基石,因此性能调优至关重要。比如在 Oracle 数据库中,DBAers 通常使用 AWR、ASH、ADDM 等性能优化工具进行分析与优化数据库。
在金仓数据库 KingbaseES 中也为用户提供了对应的优化工具(三剑客):
- KWR(Kingbase Auto Workload Repertories)
- KSH
- KDDM

通过以上性能优化工具,可以轻松驾驭性能调优。本文主要讲一下 KWR 工具的使用!
KWR 介绍
SYS_KWR 是 KingbaseES 自动负载信息库(Kingbase Auto Workload Repertories)的简称,它通过周期性自动记录性能统计相关的快照,分析出 KingbaseES 的操作系统运行环境、数据库时间组成、等待事件和 TOP SQL 等性能指标,为数据库性能调优提供指导。
KWR 以插件的形式存在于 KingbaseES 产品中,目前最新版本是 1.8。
📢 注意:KingbaseES 由低版本升级至 V009R001C002B0014 后,需尽快将 KWR 插件升级至 1.8 版本,否则
自动快照和手工快照功能将无法使用。
KWR 的基本原理:数据库实例运行过程中不断产生一些统计数据,比如对某个表的访问次数,数据页的内存命中次数,某个等待事件发生的次数和总时间,SQL 语句的解析时间等,这些统计数据被一个叫做 KWR collector 的后台性能监控进程周期性地(默认每小时)自动采集,存储到 KWR 快照库里面,这些快照默认保存 8 天,到期后那些旧的快照被自动删除。
当出现性能问题的时候,可以通过指定时间段来查询相关快照列表,生成 KWR 报告,定位性能问题的根本原因。
KWR 通过自动采集操作系统和数据库实例的性能数据,将其存储为 KWR 快照,并依此来生成 KWR 报告为
DBA 性能调优提供参考,其价值包括:
- 自动采集操作系统统计信息,不需要额外的性能监控工具。
- 感知数据库运行环境,排查数据库实例外部原因造成的性能问题。
- 通过统一的 DB Time 模型,度量数据库关键活动耗时。
- 通过 query ID 将 SQL 执行时间、等待时间和资源消耗关联起来,进行语句级分析。
- 从多个维度(时间、IO、内存、锁、实例、库对象等)分析数据库实例的性能问题。
- 自动生成快照,便于回溯之前发生的性能问题。
- 为 KDDM 等自动诊断和建议提供基础数据。
开启 KWR
开启 KWR 插件需要配置 kingbase.conf 文件,打开统计开关:
1 | [kingbase@kesv9:/data]$ vi /data/kingbase.conf |
重启数据库服务器:
1 | [kingbase@kesv9:/data]$ sys_ctl restart |
使用 KWR
通过 KSQL 连接,创建 KWR 插件,创建快照,执行 SQL 后再次创建快照:
1 | [kingbase@kesv9:/data]$ ksql test system |
生成全实例的 TEXT 版本 KWR 报告:
1 | test=# SELECT * FROM perf.kwr_report(1,2); |
部分内容显示效果如下:





生成全实例的 HTML 版报告:
1 | test=# SELECT * FROM perf.kwr_report(1,2, 'html'); |
📢 注意:生成的 KWR 报告会自动保存到 DATA 目录下的 sys_log 子目录下。

推荐使用 HTML 格式,因为它更便于阅读:






查看 KWR 报告
KWR 报告主要由三部分组成:
1、报告头:这部分主要是列出数据库实例的版本、运行环境和快照信息。
2、报告摘要:这是整个报告的精华所在,大部分的性能问题都能够从这部分报告里看到。看这部分内容的时候,如果有必要,还可以结合后面的详细报告具体分析问题。这部分最重要的几个报告是:负载分析、实例效率百分比(目标 100%)、Top 10 前台等待事件、主机环境统计(主机 CPU、IO、内存和网络)。
报告摘要部分报告列表:
- 负载分析
- 实例效率百分比(目标 100%)
- Top 10 前台等待事件
- Top 10 前台等待事件分类
- 主机 CPU
- 主机 IO
- 主机内存
- 主机网络
- IO 分析
- 内存统计
- SQL 语句数统计
3、报告主体:报告主体提供了更加全面的性能指标,主要包括:DB Time 模型、等待事件、内存统计、实例 IO 统计、锁活动统计、关键活动统计、SQL 报文统计、TOP SQL 统计、后台写统计、数据库对象统计和配置参数。
报告主体报告列表:
- CPU 统计
- 主机 CPU 详细
- 时间模型和等待事件统计
- 时间模型统计
- 前台等待事件分类
- 前台等待事件
- 后台等待事件
- 数据库执行时间
- SQL 报文执行时间
- 内存统计
- Top 10 共享内存统计
- 实例 IO 统计
- 实例 IO 按进程类型统计
- 实例 IO 按文件类型统计
- 实例 IO 按数据库名统计
- 实例 IO 按表空间统计
- 实例 IO 按数据库对象类型统计
- Top 10 读写的数据库对象统计
- 锁活动统计
- Top 10 请求次数的锁活动
- Top 10 等待时间的锁活动
- 关键活动统计
- 关键活动按执行次数统计
- 关键活动按执行时间统计
- Top SQL 统计
- 按数据库时间排序的 SQL 语句
- 按 CPU 时间排序的 SQL 语句
- 按解析时间排序的 SQL 语句
- 按计划时间排序的 SQL 语句
- 按执行时间排序的 SQL 语句
- 按执行次数排序的 SQL 语句
- 按返回元组数排序的 SQL 语句
- 按 I/O 时间排序的 SQL 语句
- 按逻辑读块数排序的 SQL 语句
- 按物理读块排序的 SQL 语句
- 按逻辑写块数排序的 SQL 语句
- 按物理写块数排序的 SQL 语句
- 按临时块数读写排序的 SQL 语句
- 按本地数据块使用排序的 SQL 语句
- 完整 SQL 列表
- 后台写统计
- 数据库统计
- 数据库对象统计
- 按顺序扫描页数排序的关系表
- 按逻辑读页数排序的关系表
- 按物理读页数排序的关系表
- 按 DML 行数排序的关系表
- 按命中率排序的关系表
- 按逻辑读页数排序的索引
- 按物理读页数排序的索引
- 按命中数排序的索引
- 存在未使用的索引
- 按执行时间排序的函数
- 按执行次数排序的函数
写在最后
金仓数据库 KWR 大概就介绍到这了,算是一个入门,后续更多细节需要自行探索!