openGauss WDR Snapshot生成性能报告详细解读

1. 简介

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

  • 类似Oracle的AWR报告,在openGauss数据库中的WDR报告也能实现类似的功能
  • 基于WDR Snapshot数据表汇总、统计,生成性能报告,默认初始化用户或监控管理员用户可以生成报告
    在这里插入图片描述

WDR主要依赖两个组件:

  • SNAPSHOT性能快照:性能快照可以配置成按一定时间间隔从内核采集一定量的性能数据,持久化在用户表空间。任何一个SNAPSHOT可以作为一个性能基线,其他SNAPSHOT与之比较的结果,可以分析出与基线的性能表现。
  • WDR Reporter:报表生成工具基于两个SNAPSHOT,分析系统总体性能表现,并能计算出更多项具体的性能指标在这两个时间段之间的变化量,生成SUMMARY 和DETAIL两个不同级别的性能数据。

2. 操作步骤

2.1. 参数启用

vi postgresql.conf
enable_wdr_snapshot=on
enable_resource_track=on
disable_memory_protect=off

gs_guc reload

2.1.1 启用WDR报告的snapshot收集

$ gs_guc reload -N all -I all -c "enable_wdr_snapshot=on"
postgres=# select name,setting from pg_settings where name like '%wdr%';
            name             | setting
-----------------------------+---------
 enable_wdr_snapshot         | on      -- 开启数据库监控快照功能
 wdr_snapshot_interval       | 60      -- 后台Snapshot线程执行监控快照的时间间隔,默认60分钟
 wdr_snapshot_query_timeout  | 100     -- 快照操作相关的sql语句的执行超时时间
 wdr_snapshot_retention_days | 8       -- 系统中数据库监控快照数据的保留天数

WDR Snasphot在启动后,会在用户表空间"pg_default",数据库"postgres"下新建schema “snapshot”,用于持久化WDR快照数据。
⚠️:WDR报告生成操作均在postgres数据库下操作进行

2.1.2 启用资源实时监控功能

在这里插入图片描述

postgres=# show enable_resource_track;
enable_resource_track
----------------------
on
(1 row)

⚠️:确认开启资源实时监控功能,否则不会纪录SQL相关信息,导致导出的WDR报告SQL信息缺失
在这里插入图片描述

2.1.3 控制系统中unique sql信息实时收集功能

⚠️:配置为0表示不启用unique sql信息收集功能,会导致导出的WDR报告SQL信息缺失
在这里插入图片描述

2.1.4 启动内存保护功能

在这里插入图片描述

postgres=# show disable_memory_protect;
disable_memory_protect
----------------------
off
(1 row)

节点内存的变化信息没采集到信息,memory protect关闭会导致无法查询dbe_perf.global_memory_node_detail视图。 而WDR的内存统计数据(snapshot.snap_global_memory_node_detail)则来源于该视图。
在这里插入图片描述

2.2. WDR信息表

2.2.1. snapshot.snapshot

记录当前系统中存储的WDR快照信息

postgres=# \d snapshot.snapshot
             Table "snapshot.snapshot"
   Column    |           Type           | Modifiers
-------------+--------------------------+-----------
 snapshot_id | bigint                   | not null    -- WDR快照序列号
 start_ts    | timestamp with time zone |             -- WDR快照的开始时间
 end_ts      | timestamp with time zone |             -- WDR快照的结束时间

2.2.2. snapshot.tables_snap_timestamp

记录所有表的WDR快照信息

postgres=# \d snapshot.tables_snap_timestamp
       Table "snapshot.tables_snap_timestamp"
   Column    |           Type           | Modifiers
-------------+--------------------------+-----------
 snapshot_id | bigint                   | not null    -- WDR快照序列号  
 db_name     | text                     |             -- WDR snapshot对应的database
 tablename   | text                     |             -- WDR snasphot对应的table
 start_ts    | timestamp with time zone |             -- WDR快照的开始时间
 end_ts      | timestamp with time zone |             -- WDR快照的结束时间

2.3. WDR数据表

WDR的数据表保存在snapshot这个schema下以snap_开头的表,其数据来源于dbe_perf这个schema内的视图

postgres=# select relname from pg_class where relname like '%snap_%';
----------------------------------------------------------------------------------------------------------------
snapshot.tables_snap_timestamp                      -- 记录所有存储的WDR快照中数据库、表对象、数据采集的开始、结束时间
snapshot.snapshot                                   -- 记录当前系统中存储的WDR快照数据的索引信息、开始、结束时间
snapshot.snapshot_pkey                              -- snapshot.snapshot表的primary key
snapshot.snap_seq                                   -- 序列
snapshot.snap_global_os_runtime                     -- 操作系统运行状态信息
snapshot.snap_global_os_threads                     -- 线程状态信息
snapshot.snap_global_instance_time                  -- 各种时间消耗信息(时间类型见instance_time视图)
snapshot.snap_summary_workload_sql_count            -- 各数据库主节点的workload上的SQL数量分布
snapshot.snap_summary_workload_sql_elapse_time      -- 数据库主节点上workload(业务)负载的SQL耗时信息
snapshot.snap_global_workload_transaction           -- 各节点上的workload的负载信息
snapshot.snap_summary_workload_transaction          -- 汇总的负载事务信息
snapshot.snap_global_thread_wait_status             -- 工作线程以及辅助线程的阻塞等待情况
snapshot.snap_global_memory_node_detail             -- 节点的内存使用情况
snapshot.snap_global_shared_memory_detail           -- 共享内存上下文的使用情况
snapshot.snap_global_stat_db_cu                     -- 数据库的CU命中情况,可以通过gs_stat_reset()进行清零
snapshot.snap_global_stat_database                  -- 数据库的统计信息
snapshot.snap_summary_stat_database                 -- 汇总的数据库统计信息
snapshot.snap_global_stat_database_conflicts        -- 数据库冲突状态的统计信息
snapshot.snap_summary_stat_database_conflicts       -- 汇总的数据库冲突状态的统计信息
snapshot.snap_global_stat_bad_block                 -- 表、索引等文件的读取失败信息
snapshot.snap_summary_stat_bad_block                -- 汇总的表、索引等文件的读取失败信息
snapshot.snap_global_file_redo_iostat               -- Redo(WAL)相关统计信息
snapshot.snap_summary_file_redo_iostat              -- 汇总的Redo(WAL)相关统计信息
snapshot.snap_global_rel_iostat                     -- 数据对象IO统计信息
snapshot.snap_summary_rel_iostat                    -- 汇总的数据对象IO统计信息
snapshot.snap_global_file_iostat                    -- 数据文件IO统计信息
snapshot.snap_summary_file_iostat                   -- 汇总的数据文件IO统计信息
snapshot.snap_global_replication_slots              -- 复制节点的信息
snapshot.snap_global_bgwriter_stat                  -- 后端写进程活动的统计信息
snapshot.snap_global_replication_stat               -- 日志同步状态信息
snapshot.snap_global_transactions_running_xacts     -- 各节点运行事务的信息
snapshot.snap_summary_transactions_running_xacts    -- 汇总各节点运行事务的信息
snapshot.snap_global_transactions_prepared_xacts    -- 当前准备好进行两阶段提交的事务的信息
snapshot.snap_summary_transactions_prepared_xacts   -- 汇总的当前准备好进行两阶段提交的事务的信息
snapshot.snap_summary_statement                     -- SQL语句的全量信息
snapshot.snap_global_statement_count                -- 当前时刻执行的DML/DDL/DQL/DCL语句统计信息
snapshot.snap_summary_statement_count               -- 汇总的当前时刻执行的DML/DDL/DQL/DCL语句统计信息
snapshot.snap_global_config_settings                -- 数据库运行时参数信息
snapshot.snap_global_wait_events                    -- event等待相关统计信息
snapshot.snap_summary_user_login                    -- 用户登录和退出次数的相关信息
snapshot.snap_global_ckpt_status                    -- 实例的检查点信息和各类日志刷页情况
snapshot.snap_global_double_write_status            -- 实例的双写文件的情况
snapshot.snap_global_pagewriter_status              -- 实例的刷页信息和检查点信息
snapshot.snap_global_redo_status                    -- 实例的日志回放情况
snapshot.snap_global_rto_status                     -- 极致RTO状态信息
snapshot.snap_global_recovery_status                -- 主机和备机的日志流控信息
snapshot.snap_global_threadpool_status              -- 节点上的线程池中工作线程及会话的状态信息
snapshot.snap_statement_responsetime_percentile     -- SQL响应时间P80、P95分布信息
snapshot.snap_global_statio_all_indexes             -- 数据库中的每个索引行、显示特定索引的I/O的统计
snapshot.snap_summary_statio_all_indexes            -- 汇总的数据库中的每个索引行、显示特定索引的I/O的统计
snapshot.snap_global_statio_all_sequences           -- 数据库中每个序列的每一行、显示特定序列关于I/O的统计
snapshot.snap_summary_statio_all_sequences          -- 汇总的数据库中每个序列的每一行、显示特定序列关于I/O的统计
snapshot.snap_global_statio_all_tables              -- 数据库中每个表(包括TOAST表)的I/O的统计
snapshot.snap_summary_statio_all_tables             -- 汇总的数据库中每个表(包括TOAST表)的I/O的统计
snapshot.snap_global_stat_all_indexes               -- 数据库中的每个索引行,显示访问特定索引的统计
snapshot.snap_summary_stat_all_indexes              -- 汇总的数据库中的每个索引行,显示访问特定索引的统计
snapshot.snap_summary_stat_user_functions           -- 汇总的数据库节点用户自定义函数的相关统计信息
snapshot.snap_global_stat_user_functions            -- 用户所创建的函数的状态的统计信息
snapshot.snap_global_stat_all_tables                -- 每个表的一行(包括TOAST表)的统计信息
snapshot.snap_summary_stat_all_tables               -- 汇总的每个表的一行(包括TOAST表)的统计信息
snapshot.snap_class_vital_info                      -- 校验相同的表或者索引的Oid是否一致
snapshot.snap_global_record_reset_time              -- 重置(重启,主备倒换,数据库删除)openGauss统计信息时间
snapshot.snap_summary_statio_indexes_name           -- 表snap_summary_statio_all_indexes的索引
snapshot.snap_summary_statio_tables_name            -- 表snap_summary_statio_all_tables的索引
snapshot.snap_summary_stat_indexes_name             -- 表snap_summary_stat_all_indexes的索引
snapshot.snap_class_info_name                       -- 表snap_class_vital_info的索引
(66 rows)
----------------------------------------------------------------------------------------------------------------

2.4. WDR报告创建

2.4.1. 创建snapshot

-- 当开启enable_wdr_snapshot参数时,数据库默认每小时自动执行一次snapshot操作。
-- 当然特定情况下,也可以手动使用函数创建snapshot,如:select create_wdr_snapshot();
postgres=# select * from snapshot.snapshot;
 snapshot_id |           start_ts            |            end_ts
-------------+-------------------------------+-------------------------------
          1 | 2022-07-12 05:59:09.337877+08 | 2022-07-12 05:59:10.249162+08
          2 | 2022-07-12 06:59:10.3209+08   | 2022-07-12 06:59:11.229808+08
          3 | 2022-07-12 07:59:10.426882+08 | 2022-07-12 07:59:11.340277+08
          4 | 2022-07-12 08:59:10.534251+08 | 2022-07-12 08:59:11.447762+08
          5 | 2022-07-12 09:59:11.448225+08 | 2022-07-12 09:59:26.121124+08

2.4.2. 查询数据库节点信息

postgres=# select * from pg_node_env;
 node_name |     host     | process | port  | installpath  |     datapath      |          log_directory
-----------+--------------+---------+-------+--------------+-------------------+---------------------------------
 node1   | 192.168.56.101 |    9442 | 26000 | /gaussdb/app | /gaussdb/data/db1 | /gaussdb/log/omm/pg_log/node1

2.4.3. 创建WDR Report

2.4.3.1. 生成格式化性能报告文件
postgres=# \a \t \o /gaussdb/WDR_20220712.html

参数说明如下:

  • \a:切换非对齐模式。
  • \t:切换输出的字段名的信息和行计数脚注。
  • \o:把所有的查询结果发送至服务器文件里。
  • 服务器文件路径:生成性能报告文件存放路径。用户需要拥有此路径的读写权限。
2.4.3.2. 将查询到的信息写入性能报告中
postgres=# select generate_wdr_report(1,2,'all','node','node1');

函数说明:generate_wdr_report()

-- 语法
select generate_wdr_report(begin_snap_id bigint, end_snap_id bigint, report_type cstring, report_scope cstring, node_name cstring);
-- 选项:
begin_snap_id:查询时间段开始的snapshot的id(表snapshot.snaoshot中的snapshot_id)
end_snap_id:  查询时间段结束snapshot的id。默认end_snap_id大于begin_snap_id(表snapshot.snaoshot中的snapshot_id)
report_type:  指定生成report的类型。例如,summary/detail/all,其中:summary[汇总数据]/detail[明细数据]/all[包含summary和detail]
report_scope: 指定生成report的范围,可以为cluster或者node,其中:cluster是数据库级别的信息,node是节点级别的信息。
node_name:    当report_scope指定为node时,需要把该参数指定为对应节点的名称。当report_scope为cluster时,该值可以省略或者指定为空或NULL。node[节点名称]、cluster[省略/空/NULL]

⚠️:用于生成报告的两个快照应满足以下条件:

  • 两次快照之间不能有节点重启。
  • 两次快照之间不能有主备倒换。
  • 两次快照之间不能有drop database操作。
2.4.3.3. 关闭输出选项及格式化输出命令
postgres=# \o \a \t

相关学习内容:
云数据库 GaussDB (for openGauss)文档:
https://support.huaweicloud.com/devg-opengauss/opengauss_devg_1266.html
参考文章:
https://www.modb.pro/db/59697

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值