实验十三 WDR诊断报告

一、前言

艺术来源于生活高于生活,所谓性能诊断报告,类似于我们人的体检报告。我们去医院看病,医生肯定首先让我们做医学检查,例如CT等,根据检查报告来判断我们身体有没有问题。同样的道理,在数据库中,我们直观的判断一套数据库集群有没有问题,也是根据类似于体检报告的性能诊断报告。

二、WDR相关概念

WDR报告提供数据库性能诊断报告,该报告基于基线性能数据和增量数据两个版本,从性能变化得到性能报告。

WDR(Workload Diagnosis Report)基于两次不同时间点系统的性能快照数据,生成这两个时间点之间的性能表现报表,用于诊断数据库内核的性能故障。

使用 select generate_wdr_report(...) 函数可以生成基于两个性能快照的非库级性能报告。

使用 **select generate_wdr_db_report(...)**函数可以生成基于两个性能快照的库级性能报告。

三、WDR默认采集和保存策略

WDR性能快照数据存储在postgres库的snapshot schema下,默认的采集和保存策略为:
1.每小时采集一个快照(wdr_snapshot_interval=1h)。
2.每十二个快照中有一个全量快照(wdr_snapshot_full_backup_interval=12)。
3.保留8天(wdr_snapshot_retention_days=8)。
4.不启用空间维度控制阈值(wdr_snapshot_space_threshold=0)。

四、WDR重要组件

1.SNAPSHOT性能快照:

性能快照可以配置成按一定时间间隔从内核采集一定量的性能数据,持久化在用户表空间。任何一个SNAPSHOT可以作为一个性能基线,其他SNAPSHOT与之比较的结果,可以分析出与基线的性能表现。

2.WDR Reporter:

报表生成工具基于两个SNAPSHOT,分析系统总体性能表现,并能计算出更多项具体的性能指标在这两个时间段之间的变化量,生成SUMMARY 和DETAIL两个不同级别的性能数据。

五、WDR特性约束条件

1.WDR snapshot性能快照会采集不同database的性能数据,如果数据库实例中有大量的database或者大量表,做一次WDR snapshot会花费很长时间。
2.如果在大量DDL期间做WDR snapshot可能造成WDR snapshot失败。
3.在drop database时,做WDR snapshot可能造成WDR snapshot失败。
4.如果生成WDR报告的两次快照期间进行过降副本、节点重启和主备切换等操作,则无法生成WDR报告。
5.数据库实例只读状态会造成WDR snapshot失败。
6.如果在两次快照之间有对表、索引进行删除的操作,则在WDR报告中, Index Scan、Index Tup Fetch、Idx Blks Hit Ratio、Idx Blks Read、Idx Blks Hit、Heap Blks Read可能会出现负数。

六、控制WDR开关的参数

WDR Snapshot启动,即GUC参数enable_wdr_snapshot值为on时(GUC参数详细介绍及设置方法请参考enable_wdr_snapshot部分内容),且快照数量大于等于2。

七、导出并查看WDR诊断报告

1.查看集群状态。

sql 复制代码
[root@gs01 ~]# su - Ruby
Last login: Sat Nov 22 16:09:16 CST 2025 on pts/2
[Ruby@gs01 ~]$ 
[Ruby@gs01 ~]$ cm_ctl query -Cvdip
[  CMServer State   ]

node    node_ip         instance                              state
---------------------------------------------------------------------
1  gs01 192.168.3.60     1    /data/cluster/cmserver/cm_server Primary

[   Cluster State   ]

cluster_state   : Normal
redistributing  : No
balanced        : Yes
current_az      : AZ_ALL

[  Datanode State   ]

node    node_ip         instance                                   state
--------------------------------------------------------------------------------------
1  gs01 192.168.3.60     6001 8000   /data/cluster/master/datanode1 P Primary Normal
[Ruby@gs01 ~]$ 

2.创建报告文件。

sql 复制代码
touch  /home/Ruby/wdrTestNode.html

touch /home/Ruby/wdrTestCluster.html

3.进入GaussDB数据库。

sql 复制代码
gsql -d postgres -p 8000 -r

4.查询已经生成的快照。

sql 复制代码
gaussdb=# SELECT * FROM snapshot.snapshot;
 snapshot_id |           start_ts            |            end_ts             | version | snap_flag | base_snapshot_id 
-------------+-------------------------------+-------------------------------+---------+-----------+------------------
           1 | 2025-11-22 14:40:40.107067+08 | 2025-11-22 14:40:44.584866+08 |       2 |         0 |                1
           2 | 2025-11-22 15:45:04.197657+08 | 2025-11-22 15:45:10.228653+08 |       2 |         0 |                2
           3 | 2025-11-22 16:40:07.101588+08 | 2025-11-22 16:40:12.444485+08 |       2 |         0 |                3
           4 | 2025-11-22 17:40:07.510408+08 | 2025-11-22 17:40:12.730143+08 |       2 |         1 |                3
           5 | 2025-11-22 18:40:08.488665+08 | 2025-11-22 18:40:14.776325+08 |       2 |         0 |                5
           6 | 2025-11-22 19:40:09.284507+08 | 2025-11-22 19:40:17.529907+08 |       2 |         1 |                5
           7 | 2025-11-22 20:40:10.268873+08 | 2025-11-22 20:40:18.037195+08 |       2 |         1 |                5
           8 | 2025-11-22 21:40:11.080656+08 | 2025-11-22 21:40:19.562993+08 |       2 |         0 |                8
           9 | 2025-11-22 22:40:11.266506+08 | 2025-11-22 22:40:22.029121+08 |       2 |         1 |                8
(9 rows)

5.生成格式化性能报告wdrTestNode.html。

sql 复制代码
gaussdb=# \a \t \o /home/Ruby/wdrTestNode.html
Output format is unaligned.
Showing only tuples.
gaussdb=# 

6.向性能报告wdrTestNode.html中写入数据。

sql 复制代码
gaussdb=# SELECT generate_wdr_report(6, 7, 'all', 'node', 'dn_6001');

7.关闭性能报告wdrTestNode.html。

sql 复制代码
gaussdb=# \o

8.生成格式化性能报告wdrTestCluster.html。

sql 复制代码
gaussdb=# \o /home/Ruby/wdrTestCluster.html

9.向格式化性能报告wdrTestCluster.html中写入数据。

sql 复制代码
gaussdb=# SELECT generate_wdr_report(6, 7, 'all', 'cluster');

10.关闭性能报告wdrTestCluster.html。

sql 复制代码
gaussdb=# \o \a \t
Output format is aligned.
Tuples only is off.
gaussdb=# 

11.通过网页查看生成的WDR性能报告。

相关推荐
杂亿稿1 小时前
数据库的约束
数据库
u***32431 小时前
使用python进行PostgreSQL 数据库连接
数据库·python·postgresql
Codingwiz_Joy2 小时前
Day44 盲注、报错注入 & 实战复现
数据库·安全性测试
7***99873 小时前
GaussDB数据库中SQL诊断解析之配置SQL限流
数据库·sql·gaussdb
Wang's Blog5 小时前
MongoDB小课堂: 文档操作核心技术指南:主键机制、CRUD操作与最佳实践
数据库·mongodb
g***26795 小时前
最新SQL Server 2022保姆级安装教程【附安装包】
数据库·性能优化
风123456789~6 小时前
【OceanBase专栏】OB背景知识
数据库·笔记·oceanbase
4***72136 小时前
【玩转全栈】----Django模板语法、请求与响应
数据库·python·django
c***42106 小时前
Django视图与URLs路由详解
数据库·django·sqlite