带你了解WDR-GaussDB(DWS) 的性能监测报告
摘要:通过本文,读者可知晓什么是WDR,如何创建性能数据快照以及生成WDR报告。
本文分享自华为云社区《WDR-GaussDB(DWS) 的性能监测报告》,作者:Zhang Jingyao。
GaussDB(DWS) 8.1.1版本引入了负荷诊断报告(Workload Diagnosis Report,以下简称WDR)功能,可以提供指定时间段内的性能数据,以html网页报告的形式呈现给用户。通过分析该报告,能够帮助用户发现异常、诊断问题、优化性能等,其内容丰富直观,是数据库调优的利器。
本文对WDR的原理和使用方法进行简要介绍。通过本文,读者可知晓什么是WDR,如何创建性能数据快照以及生成WDR报告。
1. WDR简介
WDR是GaussDB(DWS)数据库监控特性的衍生品。数据库内核在运行过程中积累了大量的一手数据,像执行各类SQL的数量,表和索引的访问次数和时间,CPU、内存等底层软硬件的运行情况等。用户可以通过数据库提供的系统视图实时查询这些数据。例如,查询PGXC_WORKLOAD_SQL_COUNT视图可以获得自数据库启动以来各类SQL的执行次数:
postgres=# select * from PGXC_WORKLOAD_SQL_COUNT;
node_name | workload | select_count | update_count | insert_count | delete_count | ddl_count | dml_count | dcl_count
-----------+--------------+--------------+--------------+--------------+--------------+-----------+-----------+-----------
cn_5001 | default_pool | 1125616 | 1236 | 322303 | 0 | 13 | 1573048 | 102
cn_5002 | default_pool | 1128231 | 1322 | 321048 | 0 | 2 | 1575517 | 173973
cn_5003 | default_pool | 1128191 | 1130 | 309138 | 0 | 0 | 1575430 | 173980
(3 rows)
将这些一手的性能监测数据保存下来,并进行自动化的统计分析,就得获知某段时间内数据库的运行情况,例如是否繁忙,是否有不合理的SQL,有哪些异常事件等,从而为诊断问题,性能调优提供参考依据。这便是WDR的由来。
图1 WDR原理
2. 创建性能快照
如上一章所述,对监测数据进行分析之前先要保存下来。出于性能考虑,数据库内核将各种监测数据都放在了内存里,以便快速更新和读取。一旦进程重启,这些数据将会丢失。因此,WDR做的第一件事就是将内存里的检测数据保存到外设上。这些被保存的性能监测数据被称为“快照”,而保存的过程称为“创建快照”。
注意不要将这里的“快照”与数据库的Snapshot混淆。后者指的是Database中的数据在某一时刻的状态,而WDR创建的“快照”是指将某一时刻查询到的系统视图的内容保存在专门的表格中。
WDR创建的快照保存在dbms_om schema下的表格中。每个系统视图对应一个表格,表格的名字=“dbms_om.snap_”+视图名称。例如PGXC_WORKLOAD_SQL_COUNT视图的快照保存在dbms_om.snap_pgxc_workload_sql_count表格中。
WDR支持以两种方式创建快照。一种是由后台线程定期创建,时间间隔由wdr_snapshot_interval参数指定,默认为1小时创建一次。另一种是执行create_wdr_snapshot系统函数实时创建,注意该函数需要管理员权限。
postgres=# select create_wdr_snapshot();
create_wdr_snapshot
------------------------------------------
WDR snapshot request has been submitted.
(1 row)
无论以何种方式创建,都需要将enable_wdr_snapshot参数设为on。
每次打完快照,dbms_om下snapshot相关的表格中都会增加若干行。可以通过表格dbms_om.snapshot查看目前已有快照的ID和创建起止时间。例如:
postgres=# select * from dbms_om.snapshot order by snapshot_id desc limit 5;
snapshot_id | start_ts | end_ts
-------------+-------------------------------+-------------------------------
312 | 2021-05-29 12:36:32.509763+08 | 2021-05-29 12:36:39.938167+08
311 | 2021-05-29 11:36:32.489812+08 | 2021-05-29 11:36:40.23865+08
310 | 2021-05-29 10:36:32.214843+08 | 2021-05-29 10:36:37.436173+08
309 | 2021-05-29 09:48:11.587959+08 | 2021-05-29 09:48:18.247602+08
308 | 2021-05-29 09:36:31.687527+08 | 2021-05-29 09:36:36.897983+08
(5 rows)
以第一行为例,可知ID=312的快照从2021-05-29 12:36:32开始创建,到2021-05-29 12:36:39创建完成。snapshot_id是每次快照的唯一标识。
WDR每次会对多个系统视图打快照,单个视图快照的起止时间可以通过dbms_om.tables_snap_timestamp表格查询。以ID=312的快照为例:
postgres=# select * from dbms_om.tables_snap_timestamp where snapshot_id=312;
snapshot_id | db_name | tablename | start_ts | end_ts
-------------+----------+----------------------------------+-------------------------------+-------------------------------
312 | postgres | snap_pgxc_os_run_info | 2021-05-29 12:36:32.511503+08 | 2021-05-29 12:36:32.691519+08
312 | postgres | snap_pgxc_wait_events | 2021-05-29 12:36:32.692543+08 | 2021-05-29 12:36:33.982895+08
312 | postgres | snap_pgxc_instr_unique_sql | 2021-05-29 12:36:33.983801+08 | 2021-05-29 12:36:34.131792+08
.......
(19 rows)
相比dbms_om.snapshot,dbms_om.tables_snap_timestamp表格记录了更精确的快照时间。
为了避免占用太多空间,太旧的快照会被定期清除,清除时间通过wdr_snapshot_retention_days设置,范围1~15天,默认是8天,也就是说默认8天前创建的快照会被删除。如果想保留更久的快照数据,需要用户自己做转储。
3. 生成WDR报告
有了快照后便可以对性能监测数据进行计算分析,生成报告供用户查看。不同的分析角度和分析方式可以得到不同的报告。目前WDR支持对比前后两次快照数据,生成该时间段的性能监测报告,简称“WDR报告”。
由于GaussDB(DWS)是分布式数据库,由多个节点组成,节点又分为CN(Coordinator)和DN(Datanode),相应地WDR报告也分为集群(cluster)和单节点(node)两种范围(scope)。两种scope的报告内容有所不同,前者由集群总体的性能数据组成,后者针对单个节点的性能表现进行分析计算。对于单节点scope的报告,CN和DN上的报告内容也有所不同。报告scope在生成报告时由用户指定。
GaussDB(DWS)提供了系统函数generate_wdr_report()用于创建WDR报告。生成报告前,首先需确定起止snapshot_id。通过查询dbms_om.snapshot表格,针对感兴趣的时间段,取得两个时间点对应的snapshot_id。例如,想查看2021-02-21 03:00:00和2021-02-21 04:00:00之间的性能状况:
postgres=# select * from dbms_om.snapshot where start_ts > '2021-02-21 03:00:00'::timestamptz and start_ts < '2021-02-21 04:00:00'::timestamptz order by snapshot_id;
snapshot_id | start_ts | end_ts
-------------+-------------------------------+-------------------------------
2147 | 2021-02-21 03:02:40.000716+08 | 2021-02-21 03:03:17.840595+08
2148 | 2021-02-21 03:12:39.873876+08 | 2021-02-21 03:13:15.963517+08
2149 | 2021-02-21 03:22:39.875301+08 | 2021-02-21 03:23:16.659778+08
2150 | 2021-02-21 03:32:40.857761+08 | 2021-02-21 03:33:18.477795+08
2151 | 2021-02-21 03:42:41.454982+08 | 2021-02-21 03:43:17.977323+08
2152 | 2021-02-21 03:52:41.794683+08 | 2021-02-21 03:53:18.676577+08
(6 rows)
通过以上查询得到该时间段对应的起止snapshot_id分别是2147和2152。
下一步,确定生成报告的类型。当前版本支持生成3种类型的WDR:摘要型(summary),详细型(detail)和全部型(all)。摘要型只包括简要分析计算结果,详细型只包含详细的指标数据,全部型包括摘要型和详细型的全部内容。
最后,执行generate_wdr_report()函数生成WDR报告。例如生成2021-02-21 03:00:00和2021-02-21 04:00:00之间的摘要型集群范围WDR报告,可执行:
postgres=# select generate_wdr_report(2147, 2152, 'summary', 'cluster', '');
generate_wdr_report
--------------------------------------------------------------------------
Report summary-cluster-2147-2152-20210301125740.html has been generated.
(1 row)
要生成节点cn_5001在2021-02-21 03:00:00和2021-02-21 04:00:00之间的全部型WDR报告,可执行:
postgres=# select generate_wdr_report(2147, 2152, 'all', 'node', 'cn_5001');
generate_wdr_report
----------------------------------------------------------------------
Report all-cn_5001-2147-2152-20210301125906.html has been generated.
(1 row)
成功后,会提示“$报告文件名 has been generated”。报告文件默认位放在当前CN节点的pg_log目录下,可以用web浏览器打开:
图 2 WDR报告
报告中的各部分默认为展开状态,如果双击标题,相关部分内容会收起,标题前“-”变为“+”,如图3所示:
图3收起后的WDR报告样式
报告中各指标的含义可参考产品文档。如何运用WDR报告分析和定位问题将在后续的文章中讨论。
4. 注意事项
如前文所述,WDR特性依赖于各种数据库内核监测功能提供数据。出于性能考虑,有些内核监测功能默认处于关闭状态,需要通过GUC参数开启。如果不开启,相应性能视图查询的结果是空的,也无法生成正确的快照和WDR报告。如果要得到完整的WDR报告,需要将下表中的GUC参数设为最后一列中的值:
想了解GuassDB(DWS)更多信息,欢迎微信搜索“GaussDB DWS”关注微信公众号,和您分享最新最全的PB级数仓黑科技,后台还可获取众多学习资料哦~
带你了解WDR-GaussDB(DWS) 的性能监测报告的更多相关文章
- 在线学习体验大PK 云智慧发布在线教育网站性能监测报告
互联网不但改变了我们的生活.娱乐和消费方式,也推动各行各业进行着快速变革,越来越多的职场人士必须通过不断的学习.充电才能跟上行业发展的步伐,获得职业的提升,而这也引发了国内教育市场的爆炸式发展.据统计 ...
- 十八般武艺玩转GaussDB(DWS)性能调优(三):好味道表定义
摘要:表结构设计是数据库建模的一个关键环节,表定义好坏直接决定了集群的有效容量以及业务查询性能,本文从产品架构.功能实现以及业务特征的角度阐述在GaussDB(DWS)的中表定义时需要关注的一些关键因 ...
- 十八般武艺玩转GaussDB(DWS)性能调优:SQL改写
摘要:本文将系统介绍在GaussDB(DWS)系统中影响性能的坏味道SQL及SQL模式,帮助大家能够从原理层面尽快识别这些坏味道SQL,在调优过程中及时发现问题,进行整改. 数据库的应用中,充斥着坏味 ...
- 十八般武艺玩转GaussDB(DWS)性能调优:路径干预
摘要:路径生成是表关联方式确定的主要阶段,本文介绍了几个影响路径生成的要素:cost_param, scan方式,join方式,stream方式,并从原理上分析如何干预路径的生成. 一.cost模型选 ...
- 一文详解数仓GaussDB(DWS) 函数出参带出方式
摘要:本文主要讲解DWS函数出参带出方式. 本文分享自华为云社区<GaussDB(DWS)功能 -- 函数出参 #[玩转PB级数仓GaussDB(DWS)]>,作者:譡里个檔 . DWS的 ...
- 从数据仓库双集群系统模式探讨,看GaussDB(DWS)的容灾设计
摘要:本文主要是探讨OLAP关系型数据库框架的数据仓库平台如何设计双集群系统,即增强系统高可用的保障水准,然后讨论一下GaussDB(DWS)的容灾应该如何设计. 当前社会.企业运行当中,大数据分析. ...
- 由两个问题引发的对GaussDB(DWS)负载均衡的思考
摘要:GaussDB(DWS)的负载均衡通过LVS+keepAlived实现.对于这种方式,需要思考的问题是,CN的返回结果是否会经过LVS,然后再返回给前端应用?如果经过LVS,那么,LVS会不会成 ...
- 详解GaussDB(DWS) explain分布式执行计划
摘要:本文主要介绍如何详细解读GaussDB(DWS)产生的分布式执行计划,从计划中发现性能调优点. 前言 执行计划(又称解释计划)是数据库执行SQL语句的具体步骤,例如通过索引还是全表扫描访问表中的 ...
- GaussDB(DWS)中共享消息队列实现的三大功能
摘要:本文将详细介绍GaussDB(DWS)中共享消息队列的实现. 本文分享自华为云社区<GaussDB(DWS)CBB组件之共享消息队列介绍>,作者:疯狂朔朔. 1)共享消息队列是什么? ...
- 细说GaussDB(DWS)复杂多样的资源负载管理手段
摘要:对于如此多的管控功能,管控起来实际的效果到底如何,本篇文章就基于当前最新版本,进行效果实测,并进行一定的分析说明. 本文分享自华为云社区<GaussDB(DWS) 资源负载管理:并发管控以 ...
随机推荐
- P8368 [LNOI2022] 串 题解
题目链接 题目分析 题目要求我们构造一个最长的 \(T\) 序列,我们首先从每个 \(T_i\) 入手,思考如何安排才能合法. 容易观察到对于每个 \(T_i\),合法的 \(T_{i-1}\) 有两 ...
- Hundred Finance 攻击事件分析
Hundred Finance 背景知识 Hundred Finance 是 fork Compound 的一个借贷项目,在2023/04/15遭受了黑客攻击.攻击者在发起攻击交易之前执行了两笔准备交 ...
- Vue源码学习(十五):diff算法(二)交叉比对(双指针)
好家伙, 本节来解决我们上一章留下来的问题, 新旧节点同时有儿子的情况本章继续解决 1.要做什么? 本章将解决, 1.在相同tag下子元素的替换问题 2.使用双指针进行元素替换, 实现效果如下: ...
- 解决ADS1.2与MDK4.7冲突问题
需要添加2个系统变量. 1,在我的电脑点击属性--->高级--->环境变量---->系统变量,增加环境变量名: ARMCC5LIB 变量值:C:\Keil\ARM\ARMCC\lib ...
- 简述几个我们对Redis 7开源社区所做的贡献
Redis 7 已经于2022年4月28号正式发布,其中包括了将近50个新的命令,增加了许多新的特性,并且在整个Redis 6到Redis 7的开发过程中,我也对Redis 的开源社区贡献了一些微薄的 ...
- 使用 LCM LoRA 4 步完成 SDXL 推理
LCM 模型 通过将原始模型蒸馏为另一个需要更少步数 (4 到 8 步,而不是原来的 25 到 50 步) 的版本以减少用 Stable Diffusion (或 SDXL) 生成图像所需的步数.蒸馏 ...
- skywalking插件工作原理剖析
1. 官方插件二次开发 前面在介绍skywalking-agent目录时,提到了它有一个插件目录,并支持动态的开发插件.其实skywalking默认已经提供大部分框架的插件了,一般情况下不需要额外开发 ...
- SpringBoot整合阿里云OSS
1.创建一个service_ossspringboot项目 2.导入相关依赖 ...其他的依赖大家自行导入 <!-- 阿里云oss依赖 --> <dependency> < ...
- Codeforces #449 div2 C题
C. Nephren gives a riddle time limit per test 2 seconds memory limit per test 256 megabytes input st ...
- Qt+FFmpeg仿VLC接收RTSP流并播放
关键词:Qt FFmpeg C++ RTSP RTP VLC 内存泄漏 摘要认证 花屏 源码 UDP 本系列原文地址. 下载直接可运行的源码,在原文顶部. 效果 产生RTSP流 比播放文件复杂一点是, ...