介绍
SYS_KWR(Kingbase Auto Workload Repertories)是KingbaseES自动负载信息库,类似Oracle的AWR,通过特定KWR collector后台进程,周期性地(默认每小时)自动采集数据库实例运行信息,并持久化到kwr_snapshots表中,默认保留8天,支持导出html和text格式,默认保存到 DATA 目录下的 sys_log 子目录下。
使用手册
加载插件
SYS_KWR以插件存在于KingbaseES,且内置于插件包,使用时,只需将插件载入数据库即可开启。
kingbase=# show shared_preload_libraries ;
shared_preload_libraries
-------------------------------------------------------------------------------------------------------------------------------------------------------
synonym, plsql, force_view, kdb_flashback,plugin_debugger, plsql_plugin_debugger, plsql_plprofiler, kdb_ora_expr, sepapower, dblink, sys_kwr, sys_spacequota, sys_stat_statements, backtrace, kdb_util
s_function, auto_bmr, sys_squeeze, src_restrict
(1 row)
使用CREATE EXTENSION sys_kwr命令将插件载入数据库中。
kingbase=# \dx
List of installed extensions
Name | Version | Schema | Description
---------------------+---------+--------------+---------------------------------------------------------------------------------------------------------------------
dbms_ddl | 1.0 | sys | DBMS_DDL system package
dbms_output | 1.0 | sys | DBMS_OUTPUT system package
dbms_utility | 1.0 | sys | dbms_utility extension package
kdb_cast | 1.0 | sys | kdb_cast extension
kdb_charbyte | 1.0 | sys | module for type bpcharbyte and varcharbyte
kdb_license | 1.0 | pg_catalog | kdb_license extension
kdb_oracle_datatype | 1.8 | sys | kdb_oracle_datatype extension
kdb_tinyint | 1.0 | pg_catalog | Create a new data type tinyint and its functions operators and indexes
....
sysaudit | 1.0 | sysaudit | provides auditing functionality
sysmac | 1.0 | sysmac | Mac for Kingbase
xlog_record_read | 1.0 | pg_catalog | xlog_record_read functions
(20 rows)
kingbase=# CREATE EXTENSION sys_kwr;
CREATE EXTENSION
kingbase=# \dx
List of installed extensions
Name | Version | Schema | Description
---------------------+---------+--------------+---------------------------------------------------------------------------------------------------------------------
dbms_ddl | 1.0 | sys | DBMS_DDL system package
dbms_output | 1.0 | sys | DBMS_OUTPUT system package
dbms_utility | 1.0 | sys | dbms_utility extension package
kdb_cast | 1.0 | sys | kdb_cast extension
kdb_charbyte | 1.0 | sys | module for type bpcharbyte and varcharbyte
kdb_license | 1.0 | pg_catalog | kdb_license extension
kdb_oracle_datatype | 1.8 | sys | kdb_oracle_datatype extension
kdb_tinyint | 1.0 | pg_catalog | Create a new data type tinyint and its functions operators and indexes
....
sys_kwr | 1.8 | public | KingbaseES auto workload repository and report builder <==============
sys_stat_statements | 1.11 | public | track parsing, planning and execution statistics of all SQL statements executed
sysaudit | 1.0 | sysaudit | provides auditing functionality
sysmac | 1.0 | sysmac | Mac for Kingbase
xlog_record_read | 1.0 | pg_catalog | xlog_record_read functions
(21 rows)
sys_kwr 插件的对象
test=# \dx+ sys_kwr
Objects in extension "sys_kwr"
Object description
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function perf.adjust_waitmsg_time(integer)
function perf.array_predict(text,integer,double precision,double precision)
function perf.bg_wait_event_htbl(jsonb,integer,integer,integer,text)
function perf.bgwriter_stats_htbl(jsonb,integer,integer,integer,text)
function perf.bgwriter_stats(integer,integer)
function perf.bgwriter_stats_reset_htbl(jsonb,integer,integer,text)
function perf.bgwriter_stats_reset(integer,integer)
function perf.bigint_predict(integer[],bigint[])
function perf.buffcache_pages()
function perf.check_attr_exists(text,text,text)
function perf.check_queryid_md5(bpchar,bigint,text)
function perf.check_role_read_all_stats()
function perf.check_settings()
function perf.check_snapid(integer,integer)
function perf.check_stmt_all_setting(integer,integer)
function perf.check_stmt_cnt(integer,integer,text)
function perf.collect_bgwriter_stats(integer)
function perf.collect_cpu_stats(integer)
参数配置
KWR依赖内核统计模块采集性能统计数据,系统默认不开启SQL/实例的统计数据,需要配置相关参数,以便KWR生成时,相关章节有数据。
参数主要分2部分,系统自身参数,sys_kwr配置参数。
1、系统自身参数
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'
参数的说明如下:
-
track_sql:统计SQL时间、SQL等待事件、SQL IO,默认为off,建议开启。
-
track_instance:统计实例级IO、锁、关键活动,默认为off,建议开启。
-
track_wait_timing:统计累积式等待事件的时间,默认为on,建议开启。
-
track_counts:统计数据库活动,默认为on。
-
track_io_timing:统计IO耗时,默认为off,建议开启。
-
track_functions:统计用户自定义函数使用情况,默认为’none’,建议’all’。
-
设置 sys_stat_statements.track 控制哪个语句可以被该模块跟踪, 声明 ‘top’ 来跟踪顶级(直接通过客户端发出)的语句,‘all’ 跟踪嵌套的语句,‘none’ 禁用语句状态收集。建议使用 ‘top’。
2、sys_kwr配置参数
sys_kwr.enable = on
sys_kwr.topn = 20
sys_kwr.history_days = 8
sys_kwr.interval = 60
sys_kwr.language = 'chinese' -- KWR 1.3 新增参数
sys_kwr.track_objects = off
sys_kwr.track_os = on -- KWR 1.4 新增参数
sys_kwr.database = 'kingbase'
参数的说明如下:
-
sys_kwr.enable:开启kwr自动快照默认为关。注:要打开自动快照功能,需要将sys_kwr.enable设置为on
-
sys_kwr.topn:显示kwr报告中排名前n条的信息,默认为20,最少为10,最多为100。
-
sys_kwr.history_days:快照保留日期,默认为8天,最少1天,最多1000天。
-
sys_kwr.interval:自动快照间隔,默认60分钟,最短10分钟,最长144000分钟(100天)。
-
sys_kwr.language:KWR报告、KWR diff报告使用语言,默认为中文(chinese 或 chn),可选为英文(english 或eng)。
-
sys_kwr.track_objects: 统计数据库对象使用情况,在sys_kwr1.7之前默认值为on,从sys_kwr1.7默认值更改为off,建议关闭。该参数需要手动添加。
-
sys_kwr.track_os: 统计系统数据,默认为on,建议开启
-
sys_kwr.database:KWR 1.8新增参数,用于指定自动快照的数据库。配置该参数后,自动快照进程会连接目标数据库,并周期性创建KWR快照,同时采集包括数据库对象在内的全部性能统计指标。
调整参数,重启数据库
[kingbase@dmdem data]$ pwd
/opt/Kingbase/ES/V9/data
[kingbase@dmdem data]$ vi kingbase.conf
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
sys_kwr.topn = 20
sys_kwr.history_days = 8
sys_kwr.interval = 10
sys_kwr.language = 'chinese'
sys_kwr.track_objects = off
sys_kwr.track_os = on
sys_kwr.database = 'kingbase'
"kingbase.conf" 785L, 28099C written
[kingbase@dmdem data]$ sys_ctl -w restart -D /opt/Kingbase/ES/V9/data -l "/opt/Kingbase/ES/V9/data/sys_log/startup.log"
waiting for server to shut down.... done
server stopped
waiting for server to start.... done
server started
[kingbase@dmdem data]$
快照生成
自动快照 sys_kwr.interval 设置为10分钟,
kingbase=# select now();
now
-------------------------------
2024-12-31 15:10:04.565062+08
(1 row)
kingbase=# show sys_kwr.enable;
sys_kwr.enable
----------------
on
(1 row)
kingbase=# SELECT * FROM perf.kwr_snapshots;
snap_id | snap_time | sess_count | snap_version
---------+------------------------+------------+--------------
1 | 2024-12-31 14:07:11+08 | 1 | 1.8
2 | 2024-12-31 15:06:01+08 | 0 | 1.8
3 | 2024-12-31 15:16:03+08 | 1 | 1.8
4 | 2024-12-31 15:26:06+08 | 1 | 1.8
(4 rows)
kingbase=# SHOW sys_kwr.interval;
sys_kwr.interval
------------------
10
(1 row)
手动快照
kingbase=# SELECT * FROM perf.create_snapshot();
create_snapshot
-----------------
5
(1 row)
kingbase=# SELECT * FROM perf.kwr_snapshots;
snap_id | snap_time | sess_count | snap_version
---------+------------------------+------------+--------------
1 | 2024-12-31 14:07:11+08 | 1 | 1.8
2 | 2024-12-31 15:06:01+08 | 0 | 1.8
3 | 2024-12-31 15:16:03+08 | 1 | 1.8
4 | 2024-12-31 15:26:06+08 | 1 | 1.8
5 | 2024-12-31 15:28:37+08 | 1 | 1.8 <=======
(5 rows)
kingbase=#
生成报告
可以通过以下2种方式调用
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在服务器上保存报告文件的全路径,必须有写文件的权限
kingbase=# SELECT * FROM perf.kwr_snapshots;
snap_id | snap_time | sess_count | snap_version
---------+------------------------+------------+--------------
1 | 2024-12-31 14:07:11+08 | 1 | 1.8
2 | 2024-12-31 15:06:01+08 | 0 | 1.8
3 | 2024-12-31 15:16:03+08 | 1 | 1.8
4 | 2024-12-31 15:26:06+08 | 1 | 1.8
5 | 2024-12-31 15:28:37+08 | 1 | 1.8
6 | 2024-12-31 15:39:08+08 | 1 | 1.8
7 | 2024-12-31 15:49:11+08 | 1 | 1.8
8 | 2024-12-31 15:59:13+08 | 1 | 1.8
9 | 2024-12-31 16:09:15+08 | 1 | 1.8
10 | 2024-12-31 16:19:17+08 | 1 | 1.8
(10 rows)
kingbase=# SELECT * FROM perf.kwr_report(9, 10, 'html');
[kingbase@dmdem sys_log]$ pwd
/opt/Kingbase/ES/V9/data/sys_log
[kingbase@dmdem sys_log]$ ll
total 224
-rw------- 1 kingbase kingbase 32185 Dec 31 15:01 kingbase-2024-12-31_134244.log
-rw------- 1 kingbase kingbase 590 Dec 31 15:01 kingbase-2024-12-31_150121.log
-rw------- 1 kingbase kingbase 590 Dec 31 15:06 kingbase-2024-12-31_150152.log
-rw------- 1 kingbase kingbase 188 Dec 31 15:06 kingbase-2024-12-31_150601.log
-rw------- 1 kingbase kingbase 177138 Dec 31 16:22 kwr_9_10_20241231_162249.html <=======
-rw------- 1 kingbase kingbase 3614 Dec 31 15:06 startup.log
kingbase=# SELECT * FROM perf.kwr_report_to_file(9, 10, 'html','/home/kingbase/kwr2024.html');
kwr_report_to_file
--------------------
t
(1 row)
kingbase=#
[kingbase@dmdem ~]$ ll
total 184
drwxrwxr-x 4 kingbase kingbase 42 Oct 18 16:31 backup
drwxrwxr-x 4 kingbase kingbase 60 Dec 2 14:44 cluster
-rw------- 1 kingbase kingbase 177138 Dec 31 16:30 kwr2024.html <=========
快照管理
快照在超过sys_kwr.history_days 天后,会自动删除,也可以手动删除。
删除部分快照:
SELECT * FROM perf.drop_snapshots(1, 3);
清理全部快照:
SELECT * FROM perf.reset_snapshots();
SYS_KWR管理
插件sys_kwr卸载方法
DROP EXTENSION sys_kwr;
插件sys_kwr升级方法,不支持跨版本升级,比如1.6—>1.8
ALTER EXTENSION sys_kwr UPDATE TO '1.8';
总结
SYS_KWR 配置相对比较灵活,可以根据业务系统的侧重方向,配置不同的快照间隔,保留时长等,报告的导出方式也支持html和text,方便运维人员查阅,不过这个导出倒是可以整合下,做成脚本或者SQL,更方便的进行导出。




