背景
SYS_KWR是KingbaseES自动负载信息库(Kingbase Auto Workload Repertories)的简称,它通过周期性自动记录性能统计相关的快照,分析出KingbaseES的操作系统运行环境、数据库时间组成、等待事件和TOP SQL等性能指标,为数据库性能调优提供指导。
当应用系统出现性能问题怀疑是数据库引起的时候,或者数据库资源消耗和性能产出不成正比是,可以通过KWR进行分析。
KWR插件的安装
KWR的基本原理:数据库实例运行过程中不断产生一些统计数据,比如对某个表的访问次数,数据页的内存命中次数,某个等待事件发生的次数和总时间,SQL语句的解析时间等,这些统计数据被一个叫做 KWR collector 的后台性能监控进程周期性地(默认每小时)自动采集,存储到KWR快照库里面,这些快照默认保存8天,到期后那些旧的快照被自动删除。
当出现性能问题的时候,可以通过指定时间段来查询相关快照列表,生成KWR报告,定位性能问题的根本原因。
安装插件
ytj=# CREATE EXTENSION sys_kwr;
使用前检查对应参数配置情况,推荐如下:
track_sql = on
track_instance = on -- KWR 1.3 新增参数
track_wait_timing = on
track_counts = on
track_io_timing = on
track_functions = 'all'
sys_stat_statements.track = 'top'
ytj=# show track_sql;
track_sql
-----------
on
(1 行记录)
ytj=# show track_instance;
track_instance
----------------
on
(1 行记录)
ytj=# show track_wait_timing;
track_wait_timing
-------------------
on
(1 行记录)
ytj=# show track_counts;
track_counts
--------------
on
(1 行记录)
ytj=# show track_io_timing;
track_io_timing
-----------------
off
(1 行记录)
ytj=# show track_functions;
track_functions
-----------------
none
(1 行记录)
ytj=# show sys_stat_statements.track;
sys_stat_statements.track
---------------------------
top
(1 行记录)
ytj=#
可以根据自己的实际需求进行调整这些参数;
快速开始
1、创建第一个快照
SELECT * FROM perf.create_snapshot();
2、执行一些sql,或者启动应用跑一些业务;
3、再次创建第二个快照
SELECT * FROM perf.create_snapshot();
4、查看创建的快照:
ytj=# SELECT * FROM perf.kwr_snapshots;
snap_id | snap_time | sess_count | snap_version
---------+------------------------+------------+--------------
1 | 2024-08-16 00:20:14+08 | 75 | 1.6
2 | 2024-08-16 00:21:12+08 | 74 | 1.6
3 | 2024-08-16 00:29:37+08 | 72 | 1.6
4 | 2024-08-16 00:37:40+08 | 92 | 1.6
(4 行记录)
5、生成两个快照的报告
SELECT * FROM perf.kwr_report(3,4,'html');
也可以把报告生成为html文件,通过浏览器打开。
SELECT * FROM perf.kwr_report_to_file(3,4,'html' , '/tmp/rep.html');