作为一名Oracle DBA,在遇到性能诊断时经常使用的AWR报告,通过这份报告DBA可以较为全面的分析出数据库的性能问题所在范围,为下一步的数据库性能优化和故障诊断提供有力支撑。听说Mogdb数据库中也看到了类似的功能,那就是Mogdb的WDR报告,今天不妨一试究竟。闲话少说,直接开干。
一、开启WDR报告的snapshot收集
./gs_guc reload -N all -I all -c "enable_wdr_snapshot=on"
The gs_guc run with the following arguments: [./gs_guc -N all -I all -c enable_wdr_snapshot=on reload ].
Begin to perform the total nodes: 1.
Popen count is 1, Popen success count is 1, Popen failure count is 0.
Begin to perform gs_guc for datanodes.
Command count is 1, Command success count is 1, Command failure count is 0.
Total instances: 1. Failed instances: 0.
ALL: Success to perform gs_guc!
yk=> select name,setting from pg_settings where name like '%wdr%';
name | setting
-----------------------------+---------
enable_wdr_snapshot | on
wdr_snapshot_interval | 60
wdr_snapshot_query_timeout | 100
wdr_snapshot_retention_days | 8
(4 rows)
解释:每一个小时自动生成一个wdr,保留天数8天
二、模拟数据,主要模拟读和写
yk=> create table t8(id int, info int[]);
CREATE TABLE
yk=> insert into t8 select generate_series(1,10000),'{1,1,2,2,3,3,4,4}'::int[];
INSERT 0 10000
yk=> insert into t8 select generate_series(1,10000),'{1,1,2,2,3,3,4,4}'::int[];
INSERT 0 10000
yk=> insert into t8 select generate_series(1,1000000),'{1,1,2,2,3,3,4,4}'::int[];
INSERT 0 1000000
analyze t8;
yk=> select * from t8
yk=> select count(*) from t8;
count
---------
1020000
(1 row)
三、手工创建快照
创建snapshot
MogDB=# select create_wdr_snapshot();
create_wdr_snapshot
-----------------------------------------
WDR snapshot request has been submitted
(1 row)
MogDB=# select * from snapshot.snapshot;
snapshot_id | start_ts | end_ts
-------------+-------------------------------+-------------------------------
1 | 2022-09-07 17:55:54.01329+08 | 2022-09-07 17:55:54.471282+08
2 | 2022-09-08 08:44:21.609754+08 | 2022-09-08 08:44:22.556857+08
3 | 2022-09-08 10:20:24.677605+08 | 2022-09-08 10:20:27.517682+08
4 | 2022-09-08 11:20:25.033788+08 | 2022-09-08 11:20:26.359985+08
5 | 2022-09-08 11:32:43.150067+08 | 2022-09-08 11:32:44.297108+08
(5 rows)
查询数据库节点信息
MogDB=# select * from pg_node_env;
node_name | host | process | port | installpath | datapath | log_directory
-----------+-----------+---------+-------+-----------------+------------------+--------------------------------
dn_6001 | localhost | 1367 | 26000 | /dbms/mogdb/app | /dbms/mogdb/data | /dbms/mogdb/log/pg_log/dn_6001
(1 row)
MogDB=# \a \t \o WDR_20220908.html ---wdr报告的路径和命名
Output format is unaligned.
Showing only tuples.
MogDB=# select generate_wdr_report(3,5,'all','node','dn_6001');
MogDB=# \o \a \t
Output format is aligned.
Tuples only is off.
四、 WDR报告解读
解读:可以看到硬件配置、数据库版本、快照的采集时间
解读:这部分是实例的效率,越接近100%,数据库运行越健康,上图Soft Parse%指标值偏小则说明存在大量硬解析,因为执行的SQL(select * from t8)是第一次执行,在Buffer中找不到。
解读:前10 的等待事件,TYPE是类型,重点关注IO_EVENT类型即可
解读:主要看%ldle,代表CPU空闲占比,越高越好,一般不能低于10%
解读:在快照期间的IO负载情况
Database requests: 即每秒IO写请求次数5、请求次数总和 也是5
Database(blocks): 即每秒写block的数量5.
解读:这个太熟悉了和oracle 的awr完全一样:SQL执行时间
解读:这部分是统计用户表的IO活动状态。
解读:这部分是用户表状态的统计信息,SQL优化最要看分析最后时间。
解读:最后这部分是Mogdb数据库参数配置信息,我认为是WDR的入口,只要了解了数据库配置的参数,才能入手一步步分析。
五、总结
关于Mogdb的 WDR报告解读今天小试牛刀感觉还是不错的,由于场景简单、数据量读写和并发条件有限,好多知识点无法展开细说,希望以后有机会生产早日用上Mogdb再一一细说。最后祝愿Mogdb商业数据库在国产数据库地位越来越稳,市场份额占比越来越大。