新闻动态

「瀚高数据库技术栈」详解瀚高数据库PDR性能诊断报告

2021 年 09 月 15 日


pdr功能介绍


通常国产数据库运维是一个难点,特别是DBA人员对数据库进行性能分析时,使用一些工具等手段会大大降低分析难度。
瀚高数据库(以下简称HGDB)提供性能监控与诊断工具pdr, 实现了周期性的收集、处理、持久化和维护性能统计数据,主要用于数据库性能问题的诊断与解决,可以用来作为一段时期内数据库性能调整的参考。另外,pdr可以生成简单明了、信息丰富和分类清晰的HTML格式性能诊断报告,让DBA人员阅读起来非常方便。
pdr实现原理


HGDB的Postmaster负责fork出postgres进程,用于相应用户的查询请求,同时还fork出若干辅助进程,用于支持HGDB的运行。
pdr也是在postmaster启动时,注册的一个后台工作者进程。后台工作者进程hgPdr会使用SPI接口,对HGDB内核进行直接访问,实现统计信息的采集和存储。采集数据的过程类似于PgStat,不同之处在于,hg_pdr不会反馈采集信息给HGDB。
pdr启动后,首先初始化SPI接口,用于统计信息的采集和保存。所有信息保存在一个_pg_pdr模式中。_pg_pdr模式一共有四个表,分别保存等待事件信息、SQL执行信息、Database基本信息以及Table基本信息。

默认情况下,每隔一个小时,pdr会采集一次信息,将这些信息存入hg_pdr_模式的四个表里。每一条信息都带有一个快照id,用以识别采集的数据属于哪个时间段。这些数据,Database基本信息和Table基本信息,来自于HGDB自带的PgStat进程,pdr直接从共享内存中将这部分数据读取出来,并存入_pg_pdr_的表中。SQL执行信息来自pg_stat_statements插件,这部分信息也是保存在共享内存中的,可以通过相关函数直接读出。等待事件目前使用了pg_wait_sampling插件,对pg_stat_activity视图进行高频采样,将等待事件进行保存。_pg_pdr_中保存的统计信息,默认保留7天,超过7天的信息会被清理,以节约存储空间。
HGDB还提供一个pdr_report工具,用于生成性能分析报告。pdr_report工具会连接HGDB,将用户指定的时间段内的数据库信息取出,再结合报告模板,生成一份HTML格式的报告。
当使用pdr_report工具时,用户需要指定生成的数据库名,快照id的起止范围,生成报告的文件名。pdr_report工具会根据这些信息,从数据库中把用户指定的信息读取出来,填写到pdr_report.html模板中,最终生成pdr报告。

模板文件存放在share目录下,模板文件的样式可以进行修改,不会影响到报告的生成。
使用pdr


1、启用pdrHGDB初始化完成后,实际上已经包含了pdr功能,我们只需要通过配置postgresql.conf来启用:
shared_preload_libraries= 'worker_pg_pdr,pg_stat_statements,pg_wait_sampling'

完成修改后,重启数据库,pdr功能启用成功。让我们查看一下后台进程情况:
ps -ef |grep postgres

2、配置pdr通过修改postgresql.conf中pdr相关参数,可以对pdr进行配置。
pg_pdr.naptime = 60 # 快照的产生间隔,单位为分钟,默认为60分钟产生一次快照。naptime=0时,代表不启用PDR功能。pg_pdr.naplife = 7 # 快照的保存时间,单位为天,默认保存最近7天的快照。超过naplife的快照,会自动删除。pg_pdr.napdb = 'highgo' # 用于保存PDR快照数据表的数据库,默认设置为highgo数据库。

3、使用pdr初次安装和使用pdr时,采集的第一个快照id是0,用户可以用于生成性能分析报告的快照id是从1开始的。每采集一次快照,snap_id加1。生成快照的时机有两种。(1)自动快照:在数据库启动1分钟后自动产生一次快照,然后根据配置文件中的pg_pdr.naptime自动产生后续快照,无需操作。
(2)手动快照:在psql中输入select pg_pdr_new_snap() 即可立即产生一次快照。psql返回t,表示生成快照成功。psql返回f,表示生成快照失败。

4、生成报告使用pdr_report命令,可以生成性能分析报告。pdr生成的快照存储在napdb配置的数据库中,快照包含整个数据集簇中所有数据库的性能信息。
按照提示,依次输入数据库用户名、用户密码、快照存储数据库名、报告目标数据库名、开始快照id、结束快照id、报告文件名后即可生成报告。

性能分析报告为html网页格式,可在浏览器中打开和使用。
5、阅读pdr报告
(1)基本信息部分,包括数据库、硬件环境、报告生成时间等基础信息。

(2)负载概要,主要显示数据库的主要负载情况。

此外在摘要部分我们还看到前台事件等待top 10 的情况。

(3)等待状态首先是HGDB的三种锁spinlock,lwlock和lock的等待情况。

LWLock是一种基于spinlock机制实现的轻量级的锁,有互斥、共享、WAIT UNTIL FREE三种锁模式;

Lock是和Oracle enqueue类似的普通锁,用于操作HGDB中的数据对象的。从Lock锁的等待情况中可以分析HGDB的锁的争用情况,从而用于优化HGDB配置与应用程序。

BufferPin wait状态可以用于辅助分析热块争用与缓冲池的效率,该锁是保护内存结构用的(和Oraclelatch类似),采用硬件和操作系统提供的test and set原子操作来实现。
接下来是client、extension、IPC三个等待状态。客户端等待状态可以用于分析客户端或者应用的性能与负载情况,extension等待可以用于分析数据文件的扩展情况。IPC Wait可以用于分析数据库中的进程间通讯是否正常。

然后是用于分析数据库中的超时以及IO等待统计。

(4)实例统计信息

(5)SQL统计,统计了耗时SQL以及5类top SQL:CPU占用、IO占用、缓存命中、物理读和执行次数。


接下来的信息显示了top sql语句的完整的文本内容。

(6)IO统计信息,分别按照功能、缓冲区、对象进行统计。


(7)Segment统计,分别按照逻辑读、物理读、全表扫描进行统计。

pdr总结


HGDB的pdr功能主要作用是收集数据库和操作系统相关信息,为HGDB在运行过程中产生的性能问题提供诊断信息。

< 返回新闻

新闻推荐

2021/09/16

国家级殊荣|瀚高软件荣获第四届中国质量奖提名奖

2021/08/20

数据库领域全国首家|瀚高喜获重磅国家级荣誉

活动推荐