WDR概述
WDR报告(Workload Diagnosis Report)是GaussDB提供的性能诊断和分析工具。WDR报告描述了一段时间内整个系统资源的使用情况,可以用来了解数据库的整体运行情况。
- GaussDB定期创建性能快照(WDR Snapshot),插入数据库系统表。
- WDR快照默认每小时生成一次,保留8天。
- 生成WDR报告的两次快照中间不能有节点重启。
- 生成WDR报告的两次快照中间不能有DROP DATABASE操作。
- 生成WDR报告的两次快照中间不能有主备切换。
- 不能重置dbe_perf.statement性能视图。
与WDR报告相关的GUC参数:
GUC参数 | 默认值 | 含义 |
---|---|---|
enable_wdr_snapshot | on | 是否开启WDR快照自动生成 |
wdr_snapshot_interval | 60 | WDR自动生成快找的周期(分钟) |
wdr_shapshot_retention_days | 8 | WDR快照保留的天数 |
WDR报告分为summary、detail、all三个级别,前两个级别包含的信息如下:
报告级别 | 包含内容 |
---|---|
SUMMARY | 库级别统计数据(事务、IO、文件读写耗时等),负载信息(CPU时间、表IO、SQL量、事务量、P80/P95等),Buffer命中率,SQL软解析比例,Top Events,Wait Classes,Host CPU,IO Profile,内存统计信息等 |
DETAIL | Time Model(DB time/CPU time/Data_IO_time),SQL Statistics,Wait Events,Cache IO Stats,主备复制状态,表和索引信息(vacuum/analyze/坏块/更新数/死元组数等),数据库GUC配置信息等 |
报告生成
连接到数据库:
gsql -p30100 -d postgres -Uroot -W口令
- 查询已经生成的快照。
gaussdb=> select * from snapshot.snapshot;
snapshot_id | start_ts | end_ts | version
-------------+-------------------------------+-------------------------------+---------
335 | 2024-09-27 06:35:34.419665+08 | 2024-09-27 06:35:36.592285+08 | 1
336 | 2024-09-27 07:35:35.369409+08 | 2024-09-27 07:35:37.541394+08 | 1
337 | 2024-09-27 08:35:36.189165+08 | 2024-09-27 08:35:38.38783+08 | 1
338 | 2024-09-27 09:35:37.137452+08 | 2024-09-27 09:35:39.259274+08 | 1
339 | 2024-09-27 10:35:37.961745+08 | 2024-09-27 10:35:40.119565+08 | 1
340 | 2024-09-27 11:35:38.771877+08 | 2024-09-27 11:35:40.926857+08 | 1
...
500 | 2024-11-15 00:15:01.258812+08 | 2024-11-15 00:15:03.498959+08 | 1
501 | 2024-11-15 01:15:02.276443+08 | 2024-11-15 01:15:04.448962+08 | 1
502 | 2024-11-15 02:15:03.089845+08 | 2024-11-15 02:15:05.325526+08 | 1
503 | 2024-11-15 03:15:04.086822+08 | 2024-11-15 03:15:06.46107+08 | 1
504 | 2024-11-15 04:15:04.279436+08 | 2024-11-15 04:15:06.522976+08 | 1
505 | 2024-11-15 05:15:04.293803+08 | 2024-11-15 05:15:06.525413+08 | 1
506 | 2024-11-15 06:15:05.184283+08 | 2024-11-15 06:15:07.332549+08 | 1
507 | 2024-11-15 07:15:06.024034+08 | | 1
- (按需)手动创建快照。
gaussdb=> select create_wdr_snapshot();
create_wdr_snapshot
-----------------------------------------
WDR snapshot request has been submitted
(1 row)
- 调整输出格式和报告生成路径。
\a --切换内容为对齐/非对齐模式,生成WDR报告时选择unaligned非对齐
\t --切换输出的字段名信息和行计数脚注
\o --指定报告生成的名称和路径
Formatting
\a toggle between unaligned and aligned output mode
\t [on|off] show only rows (currently off)
\o [FILE] send all query results to file or |pipe
gaussdb=> \a
Output format is aligned.
gaussdb=> \a
Output format is unaligned.
gaussdb=> \t off
Tuples only is off.
gaussdb=> \t on
Showing only tuples.
gaussdb=> \o /home/omm/wdr_20241122_01.html
- 执行命令生成WDR报告。
select generate_wdr_report(begin_snap_id,end_snap_id,report_type,report_scope,node_name);
gaussdb=> select * from pg_node_env; --检查当前的节点名
gaussdb=> \o /home/omm/wdr_20241122_node.html
gaussdb=> select generate_wdr_report(504,505,'all','node','dn_6001'); --节点级别报告
gaussdb=> \o /home/omm/wdr_20241122_cluster.html
gaussdb=> select generate_wdr_report(504,505,'all','cluster'); --集群级别报告
其中:
begin_snap_id
:WDR报告开始的快照ID。end_snap_id
:WDR报告结束的快照ID。report_type
:WDR报告应包含的内容,取值为summary、detail、或者all。report_scope
:WDR报告的范围,取值为node或者cluster。node_name
:当report_scope=node
时,指定节点名称(取自pg_node_env
或pgxc_node
表)。
分析案例
- P80/P95响应时间
查看Load Profile章节的SQL response time P80/P95。
- Top SQL
查看SQL Statistics章节中的各个部分:
- SQL ordered by Elapsed Time
- SQL ordered by CPU Time
- SQL ordered by Rows Returned
- SQL ordered by Row Read
- SQL ordered by Physical Reads
- SQL ordered by Logical Reads
- SQL ordered by Executions
- Buffer命中率低
查看Instance Efficiency Percentages中的Buffer Hit是否在97%以上。
如果Buffer命中率低,考虑从以下两个方面优化:
- shared_buffers是否设置过小;
- SQL扫描页面是否过多,导致频繁触发buffer淘汰。
- 异常等待事件
查看Top 10 Events by Total Wait Time中的Event排序。
- 时间模型
查看Time Model中的数据库耗时分布。