zoukankan      html  css  js  c++  java
  • 带你了解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级数仓黑科技,后台还可获取众多学习资料哦~

     

    点击关注,第一时间了解华为云新鲜技术~

  • 相关阅读:
    LeetCode 295. Find Median from Data Stream (堆)
    LeetCode 292. Nim Game(博弈论)
    《JavaScript 模式》读书笔记(4)— 函数2
    《JavaScript 模式》读书笔记(4)— 函数1
    《JavaScript 模式》读书笔记(3)— 字面量和构造函数3
    《JavaScript 模式》读书笔记(3)— 字面量和构造函数2
    《JavaScript 模式》读书笔记(3)— 字面量和构造函数1
    《JavaScript 模式》读书笔记(2)— 基本技巧3
    《JavaScript 模式》读书笔记(2)— 基本技巧2
    《JavaScript 模式》读书笔记(2)— 基本技巧1
  • 原文地址:https://www.cnblogs.com/huaweiyun/p/15048211.html
Copyright © 2011-2022 走看看