功能简介
WDR
报告提供数据库性能诊断报告,WDR
是 Workload Diagnosis Report
的缩写。基于两次不同时间点系统的性能快照数据,生成这两个时间点之间的性能表现报表,用于诊断数据库内核的性能故障。
- WDR报表是长期性能问题最主要的诊断手段。基于SNAPSHOT的性能基线,从多维度做性能分析,能帮助DBA掌握系统负载繁忙程度、各个组件的性能表现及性能瓶颈。
- SNAPSHOT也是后续性能问题自诊断和自优化建议的重要数据来源。
公众号:霸王龙的日常
专注分享实用的项目实战经验
操作开始
1 以 omm 用户登录数据库 postgres
gsql -d postgres -p 26000 -r
2 查看 enable_wdr_snapshot 的值
生成 WDR 报告的前提条件是,需要打开参数 enable_wdr _snapshot
。
**参数说明:**是否开启数据库监控快照功能。
**取值范围:**布尔型
- on:打开数据库监控快照功能。
- off:关闭数据库监控快照功能。
在这里,我给大家介绍两种查看方法。
- 方法1:
openGauss=# show enable_wdr_snapshot;
- 方法2:
openGauss=# select name ,setting from pg_settings where name = 'enable_wdr_snapshot';
3 设置 enable_wdr_snapshot
openGauss=# alter system set enable_wdr_snapshot=on;
4 查询当前存在的快照。
openGauss=# select * from snapshot.snapshot;
5 若当前只有一个快照,可以再创建一个新快照。
注:
WDR 报告是基于过去两个快照生成的。而当前只有一个快照,所以这里创建一个新快照进行演示。
openGauss=# select create_wdr_snapshot();
6 查询当前存在的快照,确保新快照已经生成。
openGauss=# select * from snapshot.snapshot;
7 利用最近的两个快照,生成一份 WDR 报告
openGauss=# a t o wdr20240201.html
openGauss=# select generate_wdr_report(1, 2, 'all', 'node', pgxc_node_str()::cstring);
8 退出 gsql,查看生成的 WDR 报告。
9 下载 wdr20240201.html 到本地
使用浏览器打开,可查看 Top 10 等待事件 和 Top SQL 信息等其他统计项进行分析。
10 拓展
此外,我们还可以设置系统中数据库监控快照数据的保留天数和执行快照操作的时间间隔。
10.1 wdr_snapshot_retention_days
**参数说明:**系统中数据库监控快照数据的保留天数。当数据库运行过程期间所生成的快照量数超过保留天数内允许生成的快照数量的最大值(保留天数的分钟值 / 自动生成时间间隔的分钟值)时,系统将每隔 wdr_snapshot_interval
时间间隔,清理 snapshot_id 最小的快照数据。
该参数属于SIGHUP类型参数。
**取值范围:**整型,1~8。
默认值:8
## 查看 wdr_snapshot_retention_days 当前值
openGauss=# show wdr_snapshot_retention_days;
## 设置 wdr_snapshot_retention_days 值为7天
openGauss=# ALTER SYSTEM SET wdr_snapshot_retention_days TO 7;
## 再次查看 wdr_snapshot_retention_days 当前值
openGauss=# show wdr_snapshot_retention_days;
10.2 wdr_snapshot_interval
**参数说明:**后台线程Snapshot自动对数据库监控数据执行快照操作的时间间隔。
该参数属于SIGHUP类型参数
**取值范围:**整型,10~60(分钟)。
默认值:1h
## 查看 wdr_snapshot_interval 当前值
openGauss=# show wdr_snapshot_interval;
## 设置 wdr_snapshot_interval 值为 30 分钟
openGauss=# ALTER SYSTEM SET wdr_snapshot_interval TO 30;
## 再次查看 wdr_snapshot_interval 当前值
openGauss=# show wdr_snapshot_interval;