Kingbasde之开启kwr

自动负载信息库SYS_KWR 

SYS_KWR是KingbaseES自动负载信息库(Kingbase Auto Workload Repertories)的简称,它通过周期性自动记录性能统计相关的快照,分析出KingbaseES的操作系统运行环境、数据库时间组成、等待事件和TOP SQL等性能指标,为数据库性能调优提供指导。

SYS_KWR插件 

KWR以插件的形式存在于KingbaseES产品中,目前 V8R6 中的最新版本是1.7。

如果开启了KWR自动快照功能,会自动在kingbase库上创建该插件。可以通过SQL语句在目标库上创建:

CREATE EXTENSION sys_kwr;

KWR依赖sys_stat_statements插件(1.10版本),该插件是内置插件,会在所有库上自动被创建。

以下是创建KWR插件后查到的信息:

../../_images/image1312.png

基本原理 

../../_images/image1411.png

KWR的基本原理:数据库实例运行过程中不断产生一些统计数据,比如对某个表的访问次数,数据页的内存命中次数,某个等待事件发生的次数和总时间,SQL语句的解析时间等,这些统计数据被一个叫做 KWR collector 的后台性能监控进程周期性地(默认每小时)自动采集,存储到KWR快照库里面,这些快照默认保存8天,到期后那些旧的快照被自动删除。

当出现性能问题的时候,可以通过指定时间段来查询相关快照列表,生成KWR报告,定位性能问题的根本原因。

其他性能组件比如 KDDM,基于 KWR 快照提供自动建议。

快速生成报告 

配置文件 kingbase.conf,开启统计开关,其中 shared_preload_libraries 根据实际需要设置即可,推荐参数如下:

shared_preload_libraries = 'liboracle_parser, sys_kwr, sys_stat_statements'
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'

重启服务器。通过KSQL连接,创建KWR插件,创建快照,执行SQL后再次创建快照,就可以生成KWR报告了:

CREATE EXTENSION sys_kwr;
SELECT * FROM perf.create_snapshot();       -- 获得快照 1
CREATE TABLE IF NOT EXISTS t1(id int);      -- 创建一个示例表
SELECT count(*) FROM t1;                    -- 执行一些SQL
SELECT * FROM perf.create_snapshot();       -- 获得快照 2
SELECT * FROM perf.kwr_report(1,2);         -- 生成TEXT版本报告
SELECT * FROM perf.kwr_report(1,2, 'html'); -- 生成HTML版报告

说明:生成的KWR报告会自动保存到 DATA 目录下的 sys_log 子目录下。

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

../../_images/image1813.png

可以使用以下 SQL 函数将生成的 html 文件保存到指定文件路径。

SELECT * FROM perf.kwr_report_to_file(1,2, 'html', '/home/kingbase/kwr.html');

 KWR价值 

KWR通过自动采集操作系统和数据库实例的性能数据,将其存储为KWR快照,并依此来生成KWR报告为DBA性能调优提供参考,其价值包括:

  • 自动采集操作系统统计信息,不需要额外的性能监控工具

  • 感知数据库运行环境,排查数据库实例外部原因造成的性能问题

  • 通过统一的DB Time模型,度量数据库关键活动耗时

  • 通过query ID将SQL执行时间、等待时间和资源消耗关联起来,进行语句级分析

  • 从多个维度(时间、IO、内存、锁、实例、库对象等)分析数据库实例的性能问题

  • 自动生成快照,便于回溯之前发生的性能问题

  • 为KDDM等自动诊断和建议提供基础数据

使用SYS_KWR 

 配置GUC参数 

KWR依赖内核统计模块采集性能统计数据,建议开启以下GUC参数,否则KWR报告里会缺失部分内容:

track_sql = on
track_instance = on
track_wait_timing = on
track_counts = on
track_io_timing = on
track_functions = 'all'
sys_kwr.track_objects = on       -- KWR 1.4 新增参数
sys_kwr.track_os = on            -- KWR 1.4 新增参数

几个参数的说明如下:

  • 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'

    KWR依赖sys_stat_statements插件采集TOP SQL统计数据,建议开启以下GUC参数,否则会提示警告,且部分报告(Top SQL)没有内容:

    sys_stat_statements.track = 'top'
    
  • sys_stat_statements.track: 设置 sys_stat_statements.track 控制哪个语句可以被该模块跟踪, 声明 'top' 来跟踪顶级(直接通过客户端发出)的语句,'all' 跟踪嵌套的语句,'none' 禁用语句状态收集。建议使用 'top'。

  • sys_kwr.track_objects: 统计数据库对象使用情况,默认为on,建议开启

  • sys_kwr.track_os: 统计系统数据,默认为on,建议开启

    KWR、KWR diff相关参数:

    sys_kwr.enable = off
    sys_kwr.topn = 20
    sys_kwr.history_days = 8
    sys_kwr.interval = 60
    sys_kwr.language = 'chinese'      -- KWR 1.3 新增参数
    
  • sys_kwr.enable:开启kwr自动快照默认为关

  • 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_windows_os_info:Windows平台下是否跟踪操作系统统计信息,默认为on。开启该开关后,每次连接KWR插件所在数据库会消耗大约300毫秒来初始化Windows下的WMI库。

注意

  1. 要打开自动快照功能,需要将sys_kwr.enable设置为on

  2. 任何情况下都可以执行:SELECT * FROM perf.create_snapshot(); 来手工创建快照

  3. 自动快照会在kingbase库上创建 sys_kwr 插件

  4. shared_preload_libraries 里至少包含:liboracle_parser, sys_kwr, sys_stat_statements

快照查询 

快照的查询通过以下命令:

SELECT * FROM perf.kwr_snapshots;

../../_images/image1913.png

 自动快照 

只需要将sys_kwr.enable设置为true(需要重启服务器),就开启了自动快照功能。

后台进程 kwr collector每分钟检查最后一次快照的时间,跟当前的时间间隔是否大于sys_kwr.interval。如果大于则立刻创建新的快照,并更新最后快照时间。

如果本次自动快照没有创建成功,则在下一个检查周期(一分钟后)继续尝试创建快照。

手动快照 

配置好相关的GUC参数后,执行perf.create_snapshot() 创建手工快照,返回新的快照号,同时也在perf.kwr_snapshots里添加一条记录。

快照管理 

一般情况下,不需要手工管理已经生成的快照,KWR会在每次创建新的快照时,自动删除已经超过sys_kwr.history_days 天的快照数据,避免快照数据过多导致性能问题。

删除部分快照:

SELECT * FROM perf.drop_snapshots(1, 3);

清理全部快照:

SELECT * FROM  perf.reset_snapshots();

生成KWR报告 

生成TEXT格式的KWR报告:

SELECT * FROM perf.kwr_report(1,2,'text');

生成HTML格式的KWR报告:

SELECT * FROM perf.kwr_report(1,2,'html');

生成的报告自动保存到data目录的sys_log子目录下,可以通过图形化工具打开查看。

如果想将生成KWR报告保存到指定的磁盘目录下,用kwr_report_to_file()函数,第4个参数指定文件全路径:

SELECT * FROM perf.kwr_report_to_file(1,2,'html', '/home/kingbase/kwr_1_2.html');
  • 20
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值