前言:

postgresql的调优是比较重要的,那么,如何调优呢?自然是在某一个时间段内,通常是业务高峰期或者压测时间内实时观察数据库的运行情况,然后通过观察到的信息判断数据库的瓶颈,比如,读写瓶颈,索引瓶颈等等,最终得到一个比较准确的调优方案

那么,关键的就来了,如何实时监控数据库的运行状态?系统工具比如htop,top,free等等命令只是针对操作系统的,并不能准确反映数据库的运行情况,慢SQL这样的数据库运行细节是无法把握的哦,因此,专业的事情还是需要专业的人,专业的工具来做了,pg_activity 或者pg_top 这样的专业工具就非常的nice了

pg_activity 是一个相对较新的 PostgreSQL 实用程序,它提供了一种交互式的、易于阅读的方式来监控和分析 PostgreSQL 数据库活动。相比传统的命令行工具,如 psql 或 pg_stat_activity 视图,pg_activity 提供了更丰富的视觉展示和实时更新的特性,方便运维人员快速了解数据库的运行状态,它可以实时显示数据库的进程、查询、锁、等待事件等信息。

虽然不如 top 或 htop 这类通用系统监控工具普及,但在 PostgreSQL 社区中,pg_activity 越来越受到重视,尤其对于那些需要实时监控数据库活动的用户而言,它是一个非常有用的工具。pg_activity 通过清晰的表格形式展示进程、查询、内存、CPU使用率等信息,使得问题排查和性能分析更加直观便捷。

总之,虽然不能说 pg_activity 是绝对的主流或常用工具,但在 PostgreSQL 监控和管理领域,它是一个受欢迎且具有一定影响力的选择。

🆗,废话了半天,下面就直接上干货,不在多说了

一、

pg_activity 的安装部署(centos7)

pg_activity 和pg_top  这两个工具都是实时监控数据库运行信息的,但pg_top本文将不会多说什么,它十分类似于操作系统的实时监控小工具top命令,该工具监控的内容过于简单,其实对我们的调优活动帮助有限,而pg_activity 是有更多的功能,可以展示更多的数据库运行的详细的细节;这么说吧,就好像厨师的🔪和医生的手术刀一样,pg_activity 像手术刀一样准确

pg_activity 是基于python3.X运行的,安装部署方式比较多,但我这里只推荐使用rpm方式安装,因为这只是一个小工具,大可不必兴师动众的编译安装

yum安装也是比较的简单,把官方源配置好就可以了,安装部署见数据库的安装博客,不在这里废话了

Linux|centos7-postgresql数据库|yum安装数据库和配置repmgr高可用集群以及repmgr的日常管理工作-CSDN博客

这里需要说明一下,pg_activity 不需要特意安装在数据库的位置,可以随意安装到任意的服务器上,例如,我在192.168.123.19这个新服务器上安装pg_activity ,该服务器只安装了pg_activity ,也可以非常愉快的连接postgresql数据库,进行实时监控:

postgresql|数据库|实时数据库监控利器 pg_activity 的部署和初步使用-LMLPHP

二、

简单的使用

该命令的使用非常简单方便,和psql基本一致,端口,用户,IP指定好,如果有密码按提示输入用户的密码就好了,root用户可以执行此命令:

例如,192.168.123.17服务器上安装的pg数据库,开放端口是15433,那么,连接命令如下:

pg_activity -h 192.168.123.17 -p15433 -Upostgres

程序运行起来后,就可以进行简单的压测来获取数据库运行的一些细节了:

postgresql|数据库|实时数据库监控利器 pg_activity 的部署和初步使用-LMLPHP

按F3,可以查看当前数据库获取到锁的是哪些进程,哪些SQL命令,十分直观的显示:

postgresql|数据库|实时数据库监控利器 pg_activity 的部署和初步使用-LMLPHPpostgresql|数据库|实时数据库监控利器 pg_activity 的部署和初步使用-LMLPHP

 按F2,查看在等待的SQL语句,空格键暂时停止实时显示

postgresql|数据库|实时数据库监控利器 pg_activity 的部署和初步使用-LMLPHP

 

上述输出来自于 PostgreSQL 的查询活动监控,展示了当前正在运行的事务、锁定状态、等待时间和查询语句。以下是对每一列的解读:

  • SE:session ID,即会话编号,标识每个独立的数据库会话。
  • APP:应用程序名称,在这里是 pgbench,一个用于基准测试PostgreSQL性能的工具。
  • USER:执行查询的数据库用户,这里均为 pgbench
  • CLIENT:客户端地址和端口,这里均为 192.168.123.17/3
  • RELATION:受影响的表,例如 319565 代表表OID(对象标识符),None 表示未显示具体的表名。
  • TYPE:锁定类型,这里是 tuple(行级锁定)或 transactionid(事务ID锁定)。
  • MODE:锁定模式,这里均为 ExclusiveLock,表示独占锁,不允许其他事务同时持有该锁。
  • TIME+:事务等待锁定的时间,单位为秒。
  • Waiting:事务当前正在等待的资源,如 transactionidWALSyncClientRead 等。
  • state:事务的状态,例如 active(事务正在执行中)、idle in trans(事务已开始但尚未提交或回滚)。
  • Query:执行的SQL查询语句。

根据这些信息,可以看出 pgbench 在执行一组银行转账样例事务,包括对 pgbench_tellers 和 pgbench_branches 表的更新操作,以及将交易历史记录插入到 pgbench_history 表中。同时,还可以观察到一些事务在等待锁定资源,这在并发环境中是很常见的现象。通过监控此类信息,可以分析数据库的性能瓶颈、死锁情况以及事务处理效率等方面的问题。

总之,可以看到pg_activity 非常容易但不简略的显示了postgresql数据库压测时的实时运行细节,可以暴露出数据库的弱点,压测命令如下;

-bash-4.2$ tail 1111.txt 
transaction type: <builtin: TPC-B (sort of)>
scaling factor: 1
query mode: simple
number of clients: 100
number of threads: 1
duration: 1000 s
number of transactions actually processed: 756649
latency average = 132.181 ms
tps = 756.539109 (including connections establishing)
tps = 756.547789 (excluding connections establishing)
-bash-4.2$  pgbench  -U postgres -p 15433 -T 1000 -c 100 -h 192.168.123.17 -d pgbench   > 1111.txt  2>&1 >>1111.txt

那么,其实关键的倒不是如何监测了,而是认识这些监控的数据,从而发现数据库的问题,上面我的数据库就比较强悍,TPS比较高嘛,吞吐率强大

好了pg_activity 这个小工具就完结撒花了!!!!~~~~~

04-20 17:41