KWR报告是Diff报告的基础,在数据库运行过程中,通常在业务的高峰期和低谷期,或者在参数调整之后,数据库的性能指标都会发生变化,那么分析这种变化的根因对于我们分析数据库性能,进行优化调整是非常必要的。Diff报告的作用就是分析两个KWR报告之间的差异,找出性能变化的原因或分析性能优化的效果。
Diff 报告仅支持 HTML 格式输出。
通过 KWR 自动快照或者手动快照创建一系列 KWR 快照,然后就可以通过 perf.kwr_diff_report_to_file({snap_1}, {snap_2}, {snap_3}, {snap_4}, {file_path}) 来创建 Diff 报告:
参数说明:
snap_1: 生成第一份KWR报告的起始快照ID
snap_2: 生成第一份KWR报告的结束快照ID
snap_3: 生成第二份KWR报告的起始快照ID
snap_4: 生成第二份KWR报告的结束快照ID
file_path: 报告生成地址,示例:’/home/username/kwr_diff_report.html’
CREATE EXTENSION sys_kwr;
SELECT * FROM perf.create_snapshot();
CREATE TABLE t1(a int);
INSERT INTO t1 SELECT generate_series(1, 1000000);
SELECT * FROM perf.create_snapshot();
INSERT INTO t1 SELECT generate_series(1, 1000000);
SELECT * FROM perf.create_snapshot();
INSERT INTO t1 SELECT generate_series(1, 1000000);
SELECT * FROM perf.create_snapshot();
SELECT * FROM perf.kwr_diff_report_to_file(1, 2, 3, 4, '/home/test/kwr_diff_rpt_00.html');
KWR Diff 报告属于KWR的一个子模块,继承KWR的现有GUC参数。具体内容请参考SYS_KWR小节中关于配置GUC参数的说明。
生成Diff报告的接口有两个:
perf.kwr_diff_report_to_file({snap_1}, {snap_2}, {snap_3}, {snap_4}, {file_path}) 该接口在用户指定的目录下生成Diff报告。
perf.kwr_diff_report({snap_1}, {snap_2}, {snap_3}, {snap_4}) 该接口在默认的数据目录下的sys_log目录中生成Diff报告,同时在ksql中生成在线报告。如果sys_log目录不存在,那么仅生成一份在线报告。 默认报告的命名格式为:kwr_diff_1_2_3_4_20220531_140633.html,即前缀kwr_diff_4个快照ID_年月日_时分秒.html。
Diff报告主要由三部分组成:
1、报告头:
这部分主要是列出数据库实例的版本、两份KWR报告的快照信息。
2、报告摘要:
这部分的主要报告是:主机配置、负载分析、实例效率百分比(目标 100%)、Top 10前台等待事件、Top 10前台等待事件分类、主机IO、IO分析、内存统计以及SQL语句数统计。
3、报告主体:
报告主体提供了更加全面的性能指标对比信息,主要包括:时间模型和等待事件统计、内存统计、实例IO统计、锁活动统计、关键活动统计、TOP SQL统计、后台写统计、数据库统计、数据库对象统计和配置参数。
Diff报告内容在统计数据方面与原始KWR报告一致,同时提供了对比信息。下面举几个例子简要说明报告数据的查看方法,其它报告相同。
在Diff报告中,1st 表示第一份KWR报告的统计数据,2nd 表示第二份KWR报告的统计数据,Diff 表示两份报告统计量的差值, % Diff 表示第二份报告相比第一份报告统计量的变化百分比。
在报告头中,显示了数据库实例信息,启动时间,版本信息以及两份KWR报告的快照信息,并显示了快照时长和数据库时间的%Diff。
在Top 10 前台等待事件和Top 10 前台等待事件分类这两个diff报告中,为了方便对比,查看两份KWR报告中等待事件的变化情况,分成左右两部分进行了展示。如果某个事件仅在一份KWR报告中出现,那么在另一份KWR报告中用 '-' 表示。
在时间模型统计报告中,按“% 数据库时间”的Diff排序对两份KWR报告进行了对比。
在按数据库时间排序的 SQL 语句报告中,从平均时间(ms)、总占比(%)、CPU占比(%)、等待占比(%)这四个方面对比了两份KWR报告中的SQL语句。点击Query Hash列可以跳转到完整SQL列表的对应的SQL语句上。