Postgresql 的监控其实有很多即时的软件可以进行监控,今天会介绍PG_TOP 和PG_Activity 即时监控和处理部分操作的工具。
https://centos.pkgs.org/7/epel-x86_64/pg_top-3.7.0-5.el7.x86_64.rpm.html
1 PG_TOP 这个工具本身和LINUX TOP的命令有类似的功效,下载的地址在上面已经给出。安装时请先安装PGDG环境,否则RPM 包安装时会有依赖包找不到的情况。
可以给pg_top 建立一个账号,只赋予 pg_monitor 的权限即可
执行命令后,就能看到上面的图片的样子
pg_top -h ip 地址 -p 5432 -U 用户 -W -C -i
上面的第一行 load avg 中的三个数 分别是1 分钟,5分钟 ,15分钟
第二行 显示 6个进程与数据库有关
第三行 是与CPU 和I/O 有关的参数
第四行 内存的使用
第五行 显示当前的TPS 回滚的事务数 buffer HIT的百分比,多少行正在被读和多少行被写
并且最下方还会显示与数据库有关的process 的情况
另外还有一些常用的命令,例如键入 K ,在输入下面显示的连接进程,这样就会直接将正在的连接切断。
或者输入 o 然后输入 CPU ,或者SIZE , COMMAND 等命令,将正在显示的东西进行排序。
当然如果在扩展一下,可以将其封装成一个定时运行的命令,将当下的内容灌入到自定义的日志,可以在非人工的工作时间的一些东西记录,并可以解决当时例如系统崩溃时的问题解决,提供线索。
pg_top -h 192.168.198.80 -p 5432 -U pgtop -W -b -d 1 -x 10 > /pgdata/history
例如上面的命令可以10秒一次将相关的信息刷入到history文件中
另外PG_TOP 还有可以抓取当前你想看的线程正在执行语句的功能
按Q 键,然后输入你的线程号,就捕捉上图显示 4221 线程当前执行的命令
按L 键,然后输入你的线程号,则可以捕捉你当前执行命令所正在霸占得锁信息
按住i键 可以随时切换当前线程中 idle 和 非idle 的线程,过一段时间则直接还原都显示。
R 与 X 则分别是显示table 的 status 与 index 的状态
pg_top 的确是一个好的即使监控的工具,主要也用于出了问题时的监控与性能和问题分析。
当然PG_TOP 也有自己的不足,就是针对语句的显示上有不足,并且你在实时查看执行的语句时也有问题,虽然可以根据语句并导出,但你没有办法发现当前正在执行的语句中暂停显示,查看你觉得有问题的语句。那如果你对上面的查询分析工具不满意的情况下,可以使用下面的这个小工具
pg_activity 这个工具是通过python方式来针对你查询的问题发现和解决的一个小工具。
我们来看看这个工具能给你什么惊喜。下面这个图是就是pg_activity
执行也比较简单,在本地机安装后,直接在postgres的LINUX账号下,键入 pg_activity 就直接进入上面的界面了
下面是测试的程序,为什么要用测试的程序来,而不是手工去测,主要还是这个产品虽然能详细的输出执行的语句,并且还可以暂停动态显示,或者只查看被blocked语句,或者waiting queries 等,但如果语句执行的太快,他也是没有办法显示的,这个工具定位也是即时问题诊断工具,例如你会知道你当前的TPS 有多少,并且相关的内存,连接数,IO ,read ,write 等情况,对于分析当时故障时有帮助的。同时也可以对你感兴趣的参数进行排序。特别利于查询,某个服务器的性能比较糟糕,你要对语句进行分析的情况下,有什么预计在等待,有什么语句在blocked
这个工具本身安装也是比较简单,支持python3
直接在postgres账户下,pip3 install pg_activity 就可以安装上,当然如果你发现安装不上那可能有以下问题
1 请你安装python-3-devel --yum
2 请你安装pycopg2 --pip3
3 请你安装psycopg2-binary --pip3
等响应的包
如果对python 连 PG 敢兴趣,可以去下面的地方,里面有一些py 连接pg的脚本