【我和openGauss的故事】openGauss的WDR报告

老老老JR老北
发布于 2023-9-4 11:59
浏览
0收藏

背景

前不久给客户部署的企业版openGauss5.0版本,用与数采,
由于业务提交比较频繁,数据库的性能比较差,客户要求排查原因,
借鉴Oracle的分析经验,发现openGauss的WDR报告也是非常的全面,
通过对WDR报告的分析,也发现了一些性能的问题,给客户解决了痛点,
本文结合业务,将DWR报告的一些技能总结如下,与各位志同道合的小伙伴一起分享!

1.WDR报告

在opengauss数据库中,WDR是(Workload Diagnosis Report)负载诊断报告,
是openGauss的工作负载诊断报告,常用于判断openGauss长期性能问题。
整个数据库在运行期间的现状或者说真实状态只有在被完整记录下来,
才是可查,可知,可比较,可推测或者说为未来性能优化调整提供支撑建议的基础。

2.WDR相关参数

1.enable_wdr_snapshot:是否开启数据库监控快照功能。
2.wdr_snapshot_retention_days:系统中数据库监控快照数据的保留天数。当数据库运行过程期间所生成的快照量数超过保留天数内允许生成的快照数量的最大值时,系统将每隔wdr_snapshot_interval时间间隔,清理snapshot_id最小的快照数据。取值范围:整型,1~8
3.wdr_snapshot_interval:后台线程Snapshot自动对数据库监控数据执行快照操作的时间间隔。
4.wdr_snapshot_query_timeout:系统执行数据库监控快照操作时,设置快照操作相关的sql语句的执行超时时间。
如果语句超过设置的时间没有执行完并返回结果,则本次快照操作失败。取值范围:整型,100~INT_MAX(秒)

openGauss=# select name,setting from pg_settings where name like '%wdr%';

【我和openGauss的故事】openGauss的WDR报告-鸿蒙开发者社区

3.WDR相关操作

3.1 开启WDR报告
生成WDR报告的前提条件是,打开参数enable_wdr_snapshot
gs_guc reload -Nall -I all -c "enable_wdr_snapshot=on"

说明:
WDR Snasphot在启动后,会在用户表空间"pg_default",数据库"postgres"下新建schema “snapshot”,用于持久化WDR快照数据。

openGauss=# show enable_wdr_snapshot;
 enable_wdr_snapshot
---------------------
 on
 
 3.2 查询已经生成的快照信息
 openGauss=# select * from snapshot.snapshot;
 snapshot_id |           start_ts            |            end_ts
-------------+-------------------------------+-------------------------------
           1 | 2023-04-25 22:19:08.729911+08 | 2023-04-25 22:19:15.876007+08
           2 | 2023-04-25 23:19:09.165954+08 | 2023-04-25 23:19:12.986594+08
(2 rows)

openGauss-# \d snapshot.snapshot
             Table "snapshot.snapshot"
   Column    |           Type           | Modifiers
-------------+--------------------------+-----------
 snapshot_id | bigint                   | not null
 start_ts    | timestamp with time zone |
 end_ts      | timestamp with time zone |
Indexes:
    "snapshot_pkey" PRIMARY KEY, btree (snapshot_id) TABLESPACE pg_default


3.3 手工创建快照
openGauss=# select create_wdr_snapshot();
openGauss=# select * from snapshot.snapshot;
 snapshot_id |           start_ts            |            end_ts
-------------+-------------------------------+-------------------------------
           1 | 2023-04-25 22:19:08.729911+08 | 2023-04-25 22:19:15.876007+08
           2 | 2023-04-25 23:19:09.165954+08 | 2023-04-25 23:19:12.986594+08
           3 | 2023-04-26 00:03:03.374795+08 | 2023-04-26 00:03:05.801867+08
           
postgres=# select * from dbms_om.snapshot where start_ts > '2021-02-21 03:00:00'::timestamptz 
and start_ts < '2021-02-21 04:00:00'::timestamptz order by snapshot_id;

     
3.4 生成WDR报告
1)查询 pgxc_node_name参数值,或者使用查询视图:pg_node_env

openGauss=# show pgxc_node_name;
 pgxc_node_name
----------------
 dn_6001
(1 row)

openGauss=# select * from pg_node_env;
 node_name |   host    | process | port  |      installpath      |            datapath            |  log_directory
----------+-----------+-------+------+-----------------------+--------------------------------+------------------------------
 dn_6001   | localhost |    3368 | 15400 | /app/openGauss/dbhome | /app/openGauss/install/data/dn | /app/openGauss/log/omm/omm/pg_log/dn_6001
(1 row)

2) \a \t \o 服务器文件路径生成格式化性能报告
上述命令涉及参数说明如下:
\a:切换非对齐模式。
\t:切换输出的字段名的信息和行计数脚注。
\o:把所有的查询结果发送至服务器文件里。
服务器文件路径:生成性能报告文件存放路径。用户需要拥有此路径的读写权限
openGauss=# \a \t \o /home/omm/wdr_sarah.html


3)向性能报告wdr_sarah.html中写入数据,从snapshot.snapshot视图中选取要生成WDR报告的时间点
gsql -d postgres -p 15400 -r -c"select generate_wdr_report(快照id1,快照id2,'all','node','pgxc_node_name参数值');"
select generate_wdr_report(快照id1,快照id2,'all','node','pgxc_node_name参数值');

openGauss=# select generate_wdr_report(1,3,'all','node','dn_6001');

4)postgres=# \o \a \t -- 关闭格式化输出

【我和openGauss的故事】openGauss的WDR报告-鸿蒙开发者社区

【我和openGauss的故事】openGauss的WDR报告-鸿蒙开发者社区

4.WDR报告解读

4.1 WDR涉及的数据表
说明:WDR的数据表保存在snapshot这个schema下以snap_开头的表,其数据来源于dbe_perf这个schema内的视图,总共61张视图。

openGauss=# show search_path;
  search_path
----------------
 "$user",public
(1 row)

openGauss=# alter session set search_path=snapshot;

openGauss=# show search_path;
 search_path
-------------
 snapshot
(1 row)

openGauss=# \d+
                                                          List of relations
  Schema  |                   Name                   |   Type   | Owner |    Size    |             Storage              | Description
----------+------------------------------------------+----------+-------+------------+----------------------------------+-------------
 snapshot | snap_class_vital_info                    | table    | omm   | 2624 kB    | {orientation=row,compression=no} |
 snapshot | snap_global_bgwriter_stat                | table    | omm   | 8192 bytes | {orientation=row,compression=no} |
 snapshot | snap_global_ckpt_status                  | table    | omm   | 16 kB      | {orientation=row,compression=no} |
 snapshot | snap_global_config_settings              | table    | omm   | 864 kB     | {orientation=row,compression=no} |
 snapshot | snap_global_double_write_status          | table    | omm   | 16 kB      | {orientation=row,compression=no} |
 snapshot | snap_global_file_iostat                  | table    | omm   | 184 kB     | {orientation=row,compression=no} |
 snapshot | snap_global_file_redo_iostat             | table    | omm   | 8192 bytes | {orientation=row,compression=no} |
 snapshot | snap_global_instance_time                | table    | omm   | 16 kB      | {orientation=row,compression=no} |
 snapshot | snap_global_memory_node_detail           | table    | omm   | 8192 bytes | {orientation=row,compression=no} |
 snapshot | snap_global_os_runtime                   | table    | omm   | 56 kB      | {orientation=row,compression=no} |
 snapshot | snap_global_os_threads                   | table    | omm   | 48 kB      | {orientation=row,compression=no} |
 snapshot | snap_global_pagewriter_status            | table    | omm   | 16 kB      | {orientation=row,compression=no} |
 snapshot | snap_global_record_reset_time            | table    | omm   | 16 kB      | {orientation=row,compression=no} |
 snapshot | snap_global_recovery_status              | table    | omm   | 8192 bytes | {orientation=row,compression=no} |
 snapshot | snap_global_redo_status                  | table    | omm   | 16 kB      | {orientation=row,compression=no} |
 snapshot | snap_global_rel_iostat                   | table    | omm   | 8192 bytes | {orientation=row,compression=no} |
 snapshot | snap_global_replication_slots            | table    | omm   | 8192 bytes | {orientation=row,compression=no} |
 snapshot | snap_global_replication_stat             | table    | omm   | 8192 bytes | {orientation=row,compression=no} |
 snapshot | snap_global_rto_status                   | table    | omm   | 16 kB      | {orientation=row,compression=no} |
 snapshot | snap_global_shared_memory_detail         | table    | omm   | 104 kB     | {orientation=row,compression=no} |
 snapshot | snap_global_stat_all_indexes             | table    | omm   | 2952 kB    | {orientation=row,compression=no} |
 
 openGauss=# select relname from pg_class where relname like '%snap_%';
 4.2 WDR内容
 
 手工生成WDR报告后,通过浏览器查看。opengauss的wdr报告类似于oracle的awr,拥有资源消耗、等待事件、TOPSQL,以及参数设置等。
 
 
如前文所述,WDR特性依赖于各种数据库内核监测功能提供数据。出于性能考虑,有些内核监测功能默认处于关闭状态,需要通过GUC参数开启。如果不开启,相应性能视图查询的结果是空的,也无法生成正确的快照和WDR报告。如果要得到完整的WDR报告,需要将下表中的GUC参数设为最后一列中的值:

5.总结语


针对数据库的性能分析,个人谈一些感触

1.针对生产的数据库做性能分析,一定要与客户和用户了解发生卡顿,故障的详情,结合这些做进一步的分析
2.改动的一些东西,一定要在官网的说明反复的测试和验证,本次优化的一个问题就是改进了openGauss的线程数参数
3.优化后的一定要跟踪进度,确定后期数据库的稳定运行,
4.openGauss的WDR报告的随着不同的操作系统和硬件的配置,耗费的时间各不一样,所以选择业务量少的时候,收集DWR报告,本次出的报告,数据库容量约500G,大约出1个小时的DWR报告约20分钟




文章转载自公众号:openGauss

分类
标签
已于2023-9-4 11:59:49修改
收藏
回复
举报
回复
    相关推荐