插件sys_kwr是KingbaseES 的一个扩展插件。主要功能是通过周期性自动记录性能统计相关的快照,分析出KingbaseES的操作系统运行环境、数据库时间组成、等待事件和TOP SQL等性能指标,为数据库性能调优提供指导。
sys_kwr 是 Kingbase Auto Workload Repertories 的简称,可以对 KingbaseES 的负载信息自动以快照的方式进行记录和保存,并提供负载相关的性能报告。
在1.6版本中合入了 KSH 功能,KSH 不在做为单独的插件使用,创建 KWR 插件后便可以使用 KSH 功能。
插件名为 sys_kwr
插件版本 V1.6
KingbaseES数据库默认将他添加到 kingbase.conf 文件的 shared_preload_libraries 中,重启数据库时自动加载。
示例如下
shared_preload_libraries = 'sys_kwr'
要想使用 KWR 的全部报告功能,建议在kingbase.conf里添加以下6个参数
track_sql = on
track_instance = on
track_wait_timing = on
track_counts = on
track_io_timing = on
track_functions = 'all'
sys_stat_statements.track = 'top'
sys_kwr.enable = on
上述参数的意义如下
track_sql:开启统计 sql 时间,等待事件,IO ,默认为off
track_instance开启统计实例级IO,关键活动,锁,默认为off
track_wait_timing开启累积式等待事件记录等待时间的功能,默认为off
track_counts统计数据库活动,默认为on
track_io_timing开启IO计时统计功能,默认为off
track_functions开启函数统计功能,推荐用 'all',默认为'none'
sys_stat_statements.track跟踪统计SQL语句的访问,推荐用 'top',默认为'none'
sys_kwr.enable自动对收集到的数据生成快照并保存到kwr库里,默认为off
其他参数一般情况下使用默认值即可
sys_kwr.topn kwr报告显示topn条件记录,默认20条
sys_kwr.history_days kwr快照数据保留天数,默认8天
sys_kwr.interval kwr自动采集快照的间隔,默认60分钟
sys_kwr.language kwr报告使用语言,默认为中文(chinese 或 chn),可选为英文(english 或eng)
sys_stat_statements.track_parse pg_stat_statements记录parse次数和时间,默认开启
sys_stat_statements.track_plan pg_stat_statements记录plan次数和时间,默认开启
sys_kwr通过周期性自动记录性能统计相关的快照,分析出KingbaseES的操作系统运行环境、数据库时间组成、等待事件和TOP SQL等性能指标,为数据库性能调优提供指导。
1、SQL语句执行过程中产生的等待事件, IO 和执行时间
2、Top SQL
3、数据库对象统计信息
4、数据库实例统计信息
KingbaseES启动服务后,sys_kwr collector 后台进程后会每个小时采集一次负载信息,并保存到kwr库(test) 。
查询快照列表
SELECT * FROM perf.kwr_snapshots;
snap_id | snap_time | sess_count
--------+------------------------+------------
1 | 2021-12-07 17:51:02+08 | 1
2 | 2021-12-07 17:51:03+08 | 1
3 | 2021-12-07 17:51:04+08 | 1
(3 rows)
手工快照通过SQL语句来执行
SELECT * FROM perf.create_snapshot();
create_snapshot
-----------------
5
(1 row)
有了负载信息的快照数据后,就可以调用以下2个函数来生成kwr报告
SELECT * FROM perf.kwr_report(start_id integer, end_id integer, format text = 'text');
SELECT * FROM perf.kwr_report_to_file(start_id integer, end_id integer, format text, file_path text);
perf.kwr_report()生成报告并加报告内容自动保存到KingbaseES的data/sys_log目录下。
perf.kwr_report_to_file()则生成报告并将内容保存指定的file_path路径下。
函数参数说明
start_id起始快照ID
end_id结束快照ID
format报告的格式,只支持'text'和'html'格式,建议使用'html'格式。
file_path在服务器上保存报告文件的全路径,必须有写文件的权限。
SELECT * FROM perf.kwr_report(1,2,'html');
查看 KWR 报告,请参考KingbaseES数据库性能调优指南3.3.5章。
KSH 以每秒采样的方式进行会话和数据收集,并将采集数据放入内存的 Ringbuf 队列中,采集的数据主要包括:会话、应用、等待事件、命令类型、QueryId等。其主要使用场景是:当前或历史某个时点,发生了什么样的异常,系统在执行/运行什么任务。
KSH 功能相关的参数在kingbase.conf中设置:
shared_preload_libraries ='sys_stat_statements, sys_kwr'
track_activities = on
sys_stat_statements.max = 10000
sys_stat_statements.track =all
sys_kwr.collect_ksh = on # default = off
sys_kwr.ringbuf_size = 200000 # default = 100000
sys_kwr.history_days = 3 # default = 8;最小 2,最大 31
sys_kwr.language = 'english' # default = ‘chinese’
上述参数的意义如下:
track_activities:跟踪活动会话的等待事件、执行SQL、状态等,默认:on
sys_stat_statements.max:设置sys_stat_statement跟踪的最大语句数,默认:5000
sys_stat_statements.track:跟踪统计SQL语句的访问,推荐用 'top',默认为'none'
sys_kwr.collect_ksh:启用或禁用 KSH 数据收集
sys_kwr.ringbuf_size:设置ksh ringbuf大小
sys_kwr.history_days:设置最大的 KSH 历史数据存储
sys_kwr.language:KSH 报告展示中文/英语信息
注:采集报告需要在开启:track_activities,并至少设定 sys_kwr.collect_ksh=on 的情况下才可以查看。开启该参数会有一定的性能损耗。
KSH 采集的数据主要包括以下信息:
字段 |
类型 |
描述 |
---|---|---|
ts |
timestamptz |
采样时间 |
pid |
int |
进程ID |
client_addr |
inet |
客户端IP地址 |
app_name |
varchar(64) |
应用名称 |
db_id |
oid |
数据库OID |
db_name |
varchar(64) |
数据库名称 |
user_id |
oid |
用户OID |
user_name |
varchar(64) |
用户名 |
phase |
text |
执行阶段,如:PARSE, PLAN, EXECUTION, UNKNOWN |
event_type |
text |
等待事件类型 |
event |
text |
等待事件 |
query_id |
uint8 |
QueryId |
cmd_type |
text |
指令类型,如INSERT, SELECT, UPDATE, DELETE, UTILITY等 |
backend_type |
text |
后端类型,如:autovacuum, autovacuum worker等 |
state |
text |
运行状态 如running, idle等 |
is_simple |
bool |
简单查询语句标志 |
table_id |
oid |
IO操作变量的表OID |
func |
text |
运行plsql的函数名 |
learder_pid |
int |
父进程pid(针对并行) |
保存于内存 Ringbuf 的数据可以通过视图 perf.session_history 查看:
SELECT * FROM perf.session_history;
保存于数据库的历史数据可以通过视图 perf.ksh_history 查看:
SELECT * FROM perf.ksh_history;
SELECT perf.ksh_report({start_ts}, {duration}, {slot_width});
SELECT * FROM perf.ksh_report_to_file({start_ts},{duration},{slot_width},{file_path},{format});
SELECT * FROM perf.ksh_report_by_snapshots({start_snapid}, {end_snapid}, {slot_width}, {format});
SELECT * FROM perf.ksh_report_to_file_by_snapshots({start_snapid}, {end_snapid}, {file_path}, {format}, {slot_width});
上述参数说明:
start_ts: 报告开始时间,默认:当前时间-15分钟
duration: 报告时长,默认到15分钟,最大不超过60
slot_width: 报告最小区间,输入0时系统自动计算合适的
start_snapid: 起始快照号
end_snapid: 结束快照号
file_path: 报告生成地址,示例:’/home/username/ksh_report.html’
format: 报告生成格式,可选择 ’html’和’text’两种格式
进入 KingbaseES 创建插件
示例
DROP EXTENSION sys_kwr;
通过 alter extension 来升级插件。
示例,由 1.5 升级到 1.6
ALTER EXTENSION sys_kwr UPDATE TO '1.6';