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

openGauss设置wdr报告

智能运维推一推 2020-07-22
4559

前言

今年6月30号华为公司开源了openGauss数据库。作为新的国产数据库,当前熟悉openGauss数据库的人还比较少,文档内容也不够丰富,相关生态也是在起步阶段。

 

虽然openGauss是基于PostgreSQL早期版本的内核,但是华为在这个数据库里做了大量优化和新功能开发。所以相对于原生PostgreSQL,华为openGauss更适合商业化使用。

 

使用商业数据库Oracle的用户肯定很熟悉AWR报告这种性能采集和分析工具。用户可以挑选时间段来生成整个系统的运行报表,从而增加对数据库的洞察力。而openGauss也提供了与此类似的WDR工具。

性能快照

openGauss的WDR报告工具实现方式和Oracle差不多,也是通过定时采集数据库当前的性能数据并保存在数据库中,然后通过计算两次快照之间的性能数据增量,生成html格式的网页版报告。因此第一步是采集快照。

快照来源

相对于原生PG,openGauss内部增加了schema是DBE_PERF的性能视图。DBE_PERF Schema内视图主要用来诊断性能问题,也是WDR Snapshot的数据来源。数据库安装后,默认只有初始用户和监控管理员具有模式dbe_perf的权限

 

创建快照后,WDR的快照数据会存放在SNAPSHOT模式下面。其中snapshot.snapshot表中记录了每一次生成snapshot的信息。

WDR快照相关参数

首先学习一下数据库内部和WDR相关的参数。

enable_wdr_snapshot

参数说明:是否开启数据库监控快照功能。

该参数属于SIGHUP类型参数,请参考1中对应设置方法进行设置。

取值范围:布尔型

  • on:打开数据库监控快照功能。

  • off:关闭数据库监控快照功能。

默认值off

wdr_snapshot_retention_days

参数说明:系统中数据库监控快照数据的保留天数,超过设置的值之后,系统每隔wdr_snapshot_interval时间间隔,清理snapshot_id最小的快照数据。

该参数属于SIGHUP类型参数,请参考1中对应设置方法进行设置。

取值范围:整型,18

默认值8

wdr_snapshot_query_timeout

参数说明:系统执行数据库监控快照操作时,设置快照操作相关的sql语句的执行超时时间。如果语句超过设置的时间没有执行完并返回结果,则本次快照操作失败。

该参数属于SIGHUP类型参数,请参考1中对应设置方法进行设置。

取值范围:整型,100INT_MAX(秒)。

默认值100s

wdr_snapshot_interval

参数说明:后台线程Snapshot自动对数据库监控数据执行快照操作的时间间隔。

该参数属于SIGHUP类型参数,请参考1中对应设置方法进行设置。

取值范围:整型,1060(分钟)。

默认值1h

 

参数里面enable_wdr_snapshot是总开关,无论是自动采集还是手工采集性能快照,都需要把这个参数打开。wdr_snapshot_interval是自动采集周期,建议按照最频繁的方式设置10分钟一次。

 

开启性能快照

首先设置enable_wdr_snapshot:

gs_guc reload -Nall -I all -c "enable_wdr_snapshot=on"

 

查看snapshot表:

gs_guc reload -Nall -I all -c "select * from snapshot.snapshot"

 

查看高斯的日志,发现报错:

2020-07-13 13:55:23.160,"dn_6001_6002","omm","postgres",140370675496704,"localhost",5f0bd7ab.5017,1506,"",2020-07-1311:40:27 HKT,5/0,0,3940649673949197,"BACKEND",LOG,00000,"WDRsnapshot start",,,,,,,,,"dn_6001"

2020-07-1313:55:24.759,"dn_6001_6002","omm","postgres",140370675496704,"localhost",5f0bd7ab.5017,1507,"",2020-07-1311:40:27HKT,5/270,87796,3940649673949197,"BACKEND",ERROR,0A000,"unsupportedview for memory protection feature is disabled.",,,,,"SQL statement ""INSERTINTO snapshot.snap_memory_node_detail(snapshot_id,""snap_nodename"" , ""snap_memorytype"", ""snap_memorymbytes"" ) select 168,""nodename"" , ""memorytype"" ,""memorymbytes"" fromdbe_perf.memory_node_detail""",,,,"dn_6001"

2020-07-13 13:55:24.759,"dn_6001_6002","omm","postgres",140370675496704,"localhost",5f0bd7ab.5017,1508,"",2020-07-1311:40:27HKT,5/270,87796,3940649673949197,"BACKEND",WARNING,01000,"WDRsnapshot failed",,,,,,,,,"dn_6001

 

验证确实源表有问题:

[omm@gsnode1 ~]$gsql -d postgres -p 26000  -c"select * from dbe_perf.memory_node_detail"

ERROR:  unsupported view for memory protectionfeature is disabled.

 

这个问题看起来和memory protection有关系。把参数enable_memory_limit打开:

[omm@gsnode1 ~]$gs_guc set -N all -I all -c "enable_memory_limit=on"

Begin to performgs_guc for all datanodes.

 

Total instances: 2.Failed instances: 0.

Success to performgs_guc!

然而发现参数没有生效。查看高斯的文档发现:

enable_memory_limit

参数说明:启用逻辑内存管理模块。

该参数属于POSTMASTER类型参数,请参考1中对应设置方法进行设置。

取值范围:布尔型

·        on表示启用逻辑内存管理模块。

·        off表示不启用逻辑内存管理模块。

默认值:on

 须知:max_process_memory-sharedbuffer-cstore buffers少于2GopenGauss强制把enable_memory_limit设置为off

 

看来是内存不够的问题,我通过设置max_process_memory-sharedbuffer-cstore buffers超过2GB也是不行的,于是我调整了下面这些参数:

 gs_guc set -N all -I all -c "max_process_memory=4GB"

 gs_guc set -N all -I all -c "shared_buffers=256MB"

 gs_guc set -N all -I all -c "cstore_buffers=128MB"

 gs_guc set  -N all -I all -c"bulk_write_ring_size=128MB"

 gs_guc set  -N all -I all -c"cstore_backwrite_max_threshold=128MB"

 

重启实例后,enable_memory_limit终于设置成功。

手动采集性能快照

除了系统会按照wdr_snapshot_interval设置的周期去生成wdr的snapshot数据,用户还可以手工发起snapshot采集:

[omm@gsnode1 db1]$gsql -d postgres -p 26000  -c"select create_wdr_snapshot()"

           create_wdr_snapshot          

-----------------------------------------

 WDR snapshot request has been submitted

(1 row)

 

如果没有激活WDR参数,手工也是没法创建报告的。

[omm@gsnode1 db1]$gsql -d postgres -p 26000  -c"select create_wdr_snapshot()"

WARNING:  GUC parameter 'enable_wdr_snapshot' is off

CONTEXT:  referenced column: create_wdr_snapshot

          create_wdr_snapshot          

----------------------------------------

 WDR snapshot request can't be executed

(1 row)

 

生成WDR报告

要生成WDR的报告,需要选择起始的snapshot id,这样数据依据两次snapshot的差异生成报告。Snapshot信息存储在snapshot.snapshot里面:

[omm@gsnode1db1]$  gsql -d postgres -p 26000  -c "select * fromsnapshot.snapshot"

\ snapshot_id|           start_ts            |            end_ts            

-------------+-------------------------------+-------------------------------

         280 | 2020-07-13 15:17:41.268708+08 |2020-07-13 15:17:43.277783+08

         281 | 2020-07-13 15:22:01.889681+08 |2020-07-13 15:22:03.803941+08

(2 rows)

 

获取到snapshot的id后,使用generate_wdr_report来导出报告。

generate_wdr_report(begin_snap_idOid, end_snap_id Oid, int report_type, int report_scope, int node_name)

描述:基于两个snapshot生成系统诊断报告。

返回值类型:record

 generate_wdr_report参数说明

参数

说明

取值范围

begin_snap_id

生成某段时间内性能诊断报告的开始snapshotid

-

end_snap_id

结束snapshotid,默认end_snap_id大于begin_snap_id

-

report_type

指定生成report的类型。

  • summary

  • detail

  • all,即同时包含summary detail

report_scope

指定生成report的范围。

nodeopenGauss中的节点。

node_name

“report_scope”指定为“node”时,需要把该参数指定为对应节点的名称。

-

 

生成报告:

gsql -d postgres -p26000 -q  -c "selectgenerate_wdr_report(280,281,'all','cluster',null)" -t -o wdr_report.html

 

注意,这个函数前两个参数比较简单,是起始snapshot id。第三个参数是字符串类型,第四个参数我只有设置为‘cluster‘才成功,其他都没有设置成功。

后语

整个测试过程中还是遇到了不少问题。一方面是在启用WDR报告的时候发现enable_memory_limit缺少资源的问题。另一方面是生成WDR报告的generate_wdr_report用法很痛苦,官方文档说明有错误。不过最终这些问题都算是解决了。

 

生产中如果启用WDR报告,还需要关注下每次采集时的性能影响,SNAPSHOT下的表占用空间增长情况,最后调整合适的采集周期和清理策略。


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

评论