暂无图片
暂无图片
3
暂无图片
暂无图片
暂无图片

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

原创 锁钥 2022-11-05
2171

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

1. 简介

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

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

WDR主要依赖两个组件:

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

2. 操作步骤

2.1. 参数启用

vi $PGDATA/postgresql.conf enable_wdr_snapshot = on enable_resource_track = on disable_memory_protect = off instr_unique_sql_count = 100 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 启用资源实时监控功能

5.png

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

⚠️:确认开启资源实时监控功能,否则不会纪录SQL相关信息,导致导出的WDR报告SQL信息缺失
2.png

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

⚠️:配置为0表示不启用unique sql信息收集功能,会导致导出的WDR报告SQL信息缺失
3.png

2.1.4 启动内存保护功能

6.png

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)则来源于该视图。
4.png

2.1.5 控制是否启用Full /Slow SQL特性

image.png
enable_stmt_track参数打开时会导致导出的WDR报告格式有问题
image.png

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

最后修改时间:2023-03-10 17:16:56
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

锁钥
暂无图片
关注
暂无图片
获得了484次点赞
暂无图片
内容获得153次评论
暂无图片
获得了125次收藏
TA的专栏
容器
收录1篇内容
MySQL
收录22篇内容
PostgreSQL
收录25篇内容
目录
  • 1. 简介
  • 2. 操作步骤
    • 2.1. 参数启用
      • 2.1.1 启用WDR报告的snapshot收集
      • 2.1.2 启用资源实时监控功能
      • 2.1.3 控制系统中unique sql信息实时收集功能
      • 2.1.4 启动内存保护功能
      • 2.1.5 控制是否启用Full /Slow SQL特性
    • 2.2. WDR信息表
      • 2.2.1. snapshot.snapshot
      • 2.2.2. snapshot.tables_snap_timestamp
    • 2.3. WDR数据表
    • 2.4. WDR报告创建
      • 2.4.1. 创建snapshot
      • 2.4.2. 查询数据库节点信息
      • 2.4.3. 创建WDR Report