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

KES性能优化三剑客之SYS_AWR

原创 virvle 2025-03-04
65

性能诊断的目的是找出影响性能目标的关键因素、给出性能调优的方向

遇到性能问题,首先会对问题进行诊断,一般从操作系统资源情况及数据库资源情况进行分析,定位问题原因

image.png

在数据库层面,相比我们所熟知的Oracle,KES也提供了超级实用的性能优化工具

1.1 性能优化工具三剑客

1.1 SYS_KWR: 自动负载信息库(Kingbase Auto Workload Repertories)

通过周期性自动记录性能统计相关的快照,分析出KingbaseES的操作系统运行环境、数据库时间组成、等待事件和TOP SQL等性能指标,为数据库性能调优提供指导。
PS:后续简称KWR

1.2 SYS_KSH:明细会话历史(Kingbase Session History)和相应的报告工具

sys_ksh 以每秒采样的方式进行会话和数据收集,并将采集数据放入内存的 Ringbuf 队列中,采集的数据主要包括:会话、应用、等待事件、命令类型、QueryId 等。其主要使用场景是:当前或历史某个时点,发生了什么样的异常,系统在执行/运行什么任务。用户可以使用该工具进行会话历史的分析,并针对报告呈现的性能瓶颈进行优化。

PS: 到此,就不得不说的

KWR及KSH的用途及适用场景,大家可用按需取用

image.png

1.3 SYS_KDDM:性能自动诊断和建议的报告

它基于 KWR 快照采集的性能指标和数据库时间模型(DB Time),自动分析等待事件、IO、网络、内存和 SQL 执行时间等,给出一系列性能优化建议。通过 KDDM 报告,能够实现数据库性能的快速调优。

PS:KDDM 存在于 KWR 插件里,和 KWR 一起对外提供服务。

接下来,我们来具体看看KWR的使用

2. KWR的大显身手

2.1 KWR的基本原理

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

image.png

2.2 KWR的为DBA提供性能参考,其价值包括

(1)自动采集操作系统统计信息,不需要额外的性能监控工具。
(2)感知数据库运行环境,排查数据库实例外部原因造成的性能问题。
(3)通过统一的 DB Time 模型,度量数据库关键活动耗时。
(4)通过 query ID 将 SQL 执行时间、等待时间和资源消耗关联起来,进行语句级分析。
(5)从多个维度(时间、IO、内存、锁、实例、库对象等)分析数据库实例的性能问题。
(6)自动生成快照,便于回溯之前发生的性能问题。
(7)为 KDDM 等自动诊断和建议提供基础数据。

2.3 KWR参数设置

KWR依赖内核统计模块采集性能统计数据,建议设置如下GUC参数,否则KWR报告里会缺失部分内容
在kingbase.conf 参数文件后添加如下参数:

track_sql = on track_instance = on track_io_timing = on track_functions = 'all' sys_kwr.track_objects = off sys_kwr.track_os = on # KWR 1.4 新增参数 sys_stat_statements.track = 'top'

参数的说明如下:

track_sql:统计SQL时间、SQL等待事件、SQL IO,默认为off,建议开启。 track_instance:统计实例级IO、锁、关键活动,默认为off,建议开启。 track_io_timing:统计IO耗时,默认为off,建议开启。 track_functions:统计用户自定义函数使用情况,默认为'none',建议'all'。 sys_kwr.track_objects: 统计数据库对象使用情况,在sys_kwr1.7之前默认值为on,从sys_kwr1.7默认值更改为off,建议关闭。该参数需要手动添加。 sys_stat_statements.track: 设置 sys_stat_statements.track 控制哪个语句可以被该模块跟踪, 声明 'top' 来跟踪顶级(直接通过客户端发出)的语句,'all' 跟踪嵌套的语句,'none' 禁用语句状态收集。建议使用 'top'。 sys_kwr.enable:开启kwr自动快照默认为关。

设置完成后,重启数据库

[kingbase@dba236 ~]$ sys_ctl -D /data/Kingbase/kbs/data/ restart waiting for server to shut down.... done server stopped waiting for server to start....2025-02-16 13:37:40.726 CST [1356] LOG: config the real archive_command string as soon as possible to archive WAL files 2025-02-16 13:37:40.733 CST [1356] LOG: sepapower extension initialized 2025-02-16 13:37:40.740 CST [1356] LOG: starting KingbaseES V009R001C002B0014 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-28), 64-bit 2025-02-16 13:37:40.740 CST [1356] LOG: listening on IPv4 address "0.0.0.0", port 54321 2025-02-16 13:37:40.740 CST [1356] LOG: listening on IPv6 address "::", port 54321 2025-02-16 13:37:40.743 CST [1356] LOG: listening on Unix socket "/tmp/.s.KINGBASE.54321" 2025-02-16 13:37:40.804 CST [1356] LOG: redirecting log output to logging collector process 2025-02-16 13:37:40.804 CST [1356] HINT: Future log output will appear in directory "sys_log". done server started

别问为啥要加-D参数,问就是我遇到报错还没修复

image.png

2.4 KWR报告生成

第一次执行查询AWR快照及生成报错:

test=# CREATE EXTENSION sys_kwr; CREATE EXTENSION test=# SELECT * FROM perf.kwr_snapshots; snap_id | snap_time | sess_count | snap_version ---------+-----------+------------+-------------- (0 rows)

创建KWR快照

test=# SELECT * FROM perf.create_snapshot(); create_snapshot ----------------- 1 (1 row)

操作数据库

test=# create table t_1(id int,name varchar2(50)); CREATE TABLE test=# insert into t_1 values(1,'Guangzhou'); INSERT 0 1 test=# insert into t_1 values(2,'Chendu'),(3,'Shanghai'); INSERT 0 2 test=# select count(*) from t_1; count ------- 3 (1 row)

再次创建KWR快照

test=# SELECT * FROM perf.create_snapshot(); create_snapshot ----------------- 2 (1 row)

查询KWR快照

test=# SELECT * FROM perf.kwr_snapshots; snap_id | snap_time | sess_count | snap_version ---------+------------------------+------------+-------------- 1 | 2025-02-16 13:57:00+08 | 1 | 1.8 2 | 2025-02-16 13:59:46+08 | 1 | 1.8 (2 rows)

生成KWR报告

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

2.5 KWR报告查看

报告生成完成后,若为指定路径,会默认存放到…/data/sys_log目录下,下载查看
首先可以查看到数据库相关信息,以及报告的起止时间
image.png
接下来会有个目录,可以先按关注查看具体(比如已知CPU使用过高,就可以先关注CPU的情况),也可以一项项具体分析
image.png

摘要信息

image.png

CPU、内存、IO等信息

image.png

然后到比较另外比较关注的慢SQL及锁等待等信息

image.png

PS:更多的信息,查看AWR报告详细

3. 常见报错

在未创建AWR插件之前,直接进行查询AWR快照,会提示报错

image.png

解决措施:

test=# CREATE EXTENSION sys_kwr; CREATE EXTENSION -- ## 再次查询无报错 test=# SELECT * FROM perf.kwr_snapshots; snap_id | snap_time | sess_count | snap_version ---------+-----------+------------+-------------- (0 rows)

参考文档:
性能优化官方文档

KWR官方文档
https://bbs.kingbase.com.cn/docHtml?recId=d16e9a1be637c8fe4644c2c82fe16444&url=aHR0cHM6Ly9iYnMua2luZ2Jhc2UuY29tLmNuL2tpbmdiYXNlLWRvYy92OS9wZXJmb3IvcGVyZm9ybWFuY2Utb3B0aW1pemF0aW9uL2luZGV4Lmh0bWw

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

评论