
前言
看到灿老师上周推荐PostgreSQL的ASH工具文章。于是就自己动手尝试了一下,把整个操作步骤记录下来给大家提供参考。
配置JAVA环境
由于PostgreSQL ASH Viewer软件是JAVA写的,首先在数据库服务器上配置JAVA8,到官网下载jdk-8u421-linux-x64.tar.gz文件,上传到数据库服务器上,解压设置/etc/profile环境变量
[root@centos7 ~]# tar -zxf jdk-8u421-linux-x64.tar.gz -C /usr/local/
[root@centos7 ~]# chown -R root:root /usr/local/jdk1.8.0_421/
[root@centos7 ~]# cat >> /etc/profile << "EOF"
>
> export JAVA_HOME=/usr/local/jdk1.8.0_421
> export JRE_HOME=$JAVA_HOME/jre
> export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
> export PATH=$JAVA_HOME/bin:$PATH
>
> EOF
[root@centos7 ~]# source /etc/profile
[root@centos7 ~]# java -version
java version "1.8.0_421"
Java(TM) SE Runtime Environment (build 1.8.0_421-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.421-b09, mixed mode)
[root@centos7 ~]#
安装PASH-Viewer
从官网下载PASH-Viewer-0.4.2.tar最新版本程序上传到数据库服务器postgres用户下
[postgres@centos7 ~]$ ll
total 34888
drwxrwxr-x 2 postgres postgres 6 Aug 25 17:48 data
-rw-r--r-- 1 postgres postgres 6400000 Aug 25 17:52 PASH-Viewer-0.4.2.tar
drwxrwxr-x 6 postgres postgres 4096 Aug 25 17:13 postgresql-14.13
-rw-r--r-- 1 postgres postgres 29317064 Aug 25 17:04 postgresql-14.13.tar.gz
[postgres@centos7 ~]$ tar xf PASH-Viewer-0.4.2.tar
[postgres@centos7 ~]$ cd PASH-Viewer-0.4.2/
[postgres@centos7 PASH-Viewer-0.4.2]$ cd bin
[postgres@centos7 bin]$ pwd
/home/postgres/PASH-Viewer-0.4.2/bin
[postgres@centos7 bin]$
运行PASH-Viewer
开启图形界面直接运行
注意运行程序需要预计1G内存给出余量
[postgres@centos7 bin]$ ./PASH-Viewer
出现配置登录界面

点击New Connection出现,输入连接本地服务器数据库的信息,点击ok

选择testpg14,连接数据库,点击ok

注意我们这里需要点击Settings,选择Select Mode 为Auto 1min,选择Explain Frequency 10sec


就会显示窗口下面的Top SQL SQL text SQL plan

pgbench模拟测试
开启另一个窗口我们创建一个叫testdb的数据库,用pgbench测试一下。看看效果
[postgres@centos7 data]$ psql
Password for user postgres:
psql (14.13)
Type "help" for help.
postgres=# create database testdb;
CREATE DATABASE
postgres=# quit
[postgres@centos7 data]$ pgbench -i testdb
Password:
dropping old tables...
NOTICE: table "pgbench_accounts" does not exist, skipping
NOTICE: table "pgbench_branches" does not exist, skipping
NOTICE: table "pgbench_history" does not exist, skipping
NOTICE: table "pgbench_tellers" does not exist, skipping
creating tables...
generating data (client-side)...
100000 of 100000 tuples (100%) done (elapsed 0.04 s, remaining 0.00 s)
vacuuming...
creating primary keys...
done in 0.10 s (drop tables 0.00 s, create tables 0.00 s, client-side generate 0.05 s, vacuum 0.03 s, primary keys 0.02 s).
[postgres@centos7 data]$ pgbench -h localhost -U postgres -b simple-update -c 30 -T600 -R 3000 testdb
Password:
pgbench (14.13)
starting vacuum...end.
切换到PASH-Viewer程序,我们可以看到数据库整体的ASH运行情况

总结
PostgreSQL ASH Viewer小程序是PostgreSQL数据库中活动会话历史数据的图形工具。安装快速,无需依赖插件,可以帮我们快速定位生产环境数据库中有问题的session和SQL语句。但因为程序本身没有一个表记录ash,如果要定位查询历史问题的话,建议使用pgsentinel插件,用于记录活动会话(pg_stat_activity)历史记录并将活动与查询统计信息 (pg_stat_statements) 链接起来并保存到pg_stat_statements_history这个视图里。




