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

WDR-GaussDB(DWS)的性能监测报告

GaussDB DWS 2021-07-08
1256

点击上方蓝字,关注我们


GaussDB(DWS)的负荷诊断报告(Workload Diagnosis Report,以下简称WDR)功能,可以提供指定时间段内的性能数据,以html网页报告的形式呈现给用户。通过分析该报告,能够帮助用户发现异常、诊断问题、优化性能等,其内容丰富直观,是数据库调优的利器。本文对WDR的原理和使用方法进行简要介绍。通过本文,读者可知晓什么是WDR,如何创建性能数据快照生成报告。

GaussDB(DWS) 8.1.1版本引入了负荷诊断报告(Workload Diagnosis Report,以下简称WDR)功能,可以提供指定时间段内的性能数据,以html网页报告的形式呈现给用户。通过分析该报告,能够帮助用户发现异常、诊断问题、优化性能等,其内容丰富直观,是数据库调优的利器。
本文对WDR的原理和使用方法进行简要介绍。通过本文,读者可知晓什么是WDR,如何创建性能数据快照以及生成WDR报告。解读WDR报告,以及运用报告发现和定位问题等将在后续的文章中展开讨论。

1、WDR简介

WDR是GaussDB(DWS)数据库监控特性的衍生品。数据库内核在运行过程中积累了大量的一手数据,像执行各类SQL的数量,表和索引的访问次数和时间,CPU、内存等底层软硬件的运行情况等。用户可以通过数据库提供的系统视图实时查询这些数据。例如,查询PGXC_WORKLOAD_SQL_COUNT视图可以获得自数据库启动以来各类SQL的执行次数:

将这些一手的性能监测数据保存下来,并进行自动化的统计分析,就得获知某段时间内数据库的运行情况,例如是否繁忙,是否有不合理的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系统函数实时创建,注意该函数需要管理员权限。

无论以何种方式创建,都需要将enable_wdr_snapshot参数设为on。

每次打完快照,dbms_om下snapshot相关的表格中都会增加若干行。可以通过表格dbms_om.snapshot查看目前已有快照的ID和创建起止时间。例如:

以第一行为例,可知ID=312的快照从2021-05-29 12:36:32开始创建,到2021-05-29 12:36:39创建完成。snapshot_id是每次快照的唯一标识。

WDR每次会对多个系统视图打快照,单个视图快照的起止时间可以通过dbms_om.tables_snap_timestamp表格查询。以ID=312的快照为例:

相比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之间的性能状况:

通过以上查询得到该时间段对应的起止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报告,可执行:

要生成节点cn_5001在2021-02-21 03:00:00和2021-02-21 04:00:00之间的全部型WDR报告,可执行:

成功后,会提示“$报告文件名 has been generated”。报告文件默认位放在当前CN节点的pg_log目录下,可以用web浏览器打开:


图 2 WDR报告

报告中的各部分默认为展开状态,如果双击标题,相关部分内容会收起,标题前“-”变为“+”,如图3所示:


图3 收起后的WDR报告样式 

报告中各指标的含义可参考产品文档。如何运用WDR报告分析和定位问题将在后续的文章中讨论。

4、注意事项

 如前文所述,WDR特性依赖于各种数据库内核监测功能提供数据。出于性能考虑,有些内核监测功能默认处于关闭状态,需要通过GUC参数开启。如果不开启,相应性能视图查询的结果是空的,也无法生成正确的快照和WDR报告。如果要得到完整的WDR报告,需要将下表中的GUC参数设为最后一列中的值:


 华为云招聘
公众号:华为云招聘少年,时势造英雄!华为云2022届校园招聘等你来投
往期精彩回顾


文章转载自GaussDB DWS,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论