带你了解 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 的执行次数:
将这些一手的性能监测数据保存下来,并进行自动化的统计分析,就得获知某段时间内数据库的运行情况,例如是否繁忙,是否有不合理的 SQL,有哪些异常事件等,从而为诊断问题,性能调优提供参考依据。这便是 WDR 的由来。
图 1 WDR 原理
2. 创建性能快照
如上一章所述,对监测数据进行分析之前先要保存下来。出于性能考虑,数据库内核将各种监测数据都放在了内存里,以便快速更新和读取。一旦进程重启,这些数据将会丢失。因此,WDR 做的第一件事就是将内存里的检测数据保存到外设上。这些被保存的性能监测数据被称为“快照”,而保存的过程称为“创建快照”。
注意不要将这里的“快照”与数据库的 Snapshot 混淆。后者指的是 Database 中的数据在某一时刻的状态,而 WDR 创建的“快照”是指将某一时刻查询到的系统视图的内容保存在专门的表格中。
WDR 创建的快照保存在 dbms_omschema 下的表格中。每个系统视图对应一个表格,表格的名字=“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 beengenerated”。报告文件默认位放在当前 CN 节点的 pg_log 目录下,可以用 web 浏览器打开:
图 2 WDR 报告
报告中的各部分默认为展开状态,如果双击标题,相关部分内容会收起,标题前“-”变为“+”,如图 3 所示:
图 3 收起后的 WDR 报告样式
报告中各指标的含义可参考产品文档。如何运用 WDR 报告分析和定位问题将在后续的文章中讨论。
4. 注意事项
如前文所述,WDR 特性依赖于各种数据库内核监测功能提供数据。出于性能考虑,有些内核监测功能默认处于关闭状态,需要通过 GUC 参数开启。如果不开启,相应性能视图查询的结果是空的,也无法生成正确的快照和 WDR 报告。如果要得到完整的 WDR 报告,需要将下表中的 GUC 参数设为最后一列中的值:
想了解 GuassDB(DWS)更多信息,欢迎微信搜索“GaussDB DWS”关注微信公众号,和您分享最新最全的 PB 级数仓黑科技,后台还可获取众多学习资料哦~
版权声明: 本文为 InfoQ 作者【华为云开发者社区】的原创文章。
原文链接:【http://xie.infoq.cn/article/e1eeca0df5e6406bb746f4c9d】。文章转载请联系作者。
评论