暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

金仓SYS_KWR性能报告使用指南

452

介绍

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,更方便的进行导出。

最后修改时间:2025-01-07 16:17:55
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论