问题描述
我需要查看那些查询正在RDS for PostgreSQL 上运行,该使用什么SQL语句进行查看?
问题分析
pg_stat_activity [1] 对于排查PostgreSQL 中的连接,负载问题非常有帮助,它向我们展示了数据库中每一个连接的详细信息,如当前正在运行的语句,事务开始的时间等等。
您可以使用如下语句来查看他的视图定义,可以发现它的数据取自pg_stat_get_activity,pg_database以及pg_authid:
test=# \d+ pg_stat_activity;
下面是一些非常有用的SQL语句,可以帮助您定位到当前正在运行的查询
解决方案
1.连接到正在运行的PostgreSQL 实例
2.运行如下查询命令
test=# SELECT * FROM pg_stat_activity where state='active' ORDER BY pid;
输出有如下内容:
-[ RECORD 11 ]---+----------------------------------
datid | 16467
datname |
pid | 69318
usesysid | 16468
usename | test
application_name | psql
client_addr | 172.24.xx.xx
client_hostname |
client_port | 41636
backend_start | 2021-12-07 21:53:10.880411+08
xact_start | 2021-12-07 22:32:19.08927+08
query_start | 2021-12-07 22:32:19.08927+08
state_change | 2021-12-07 22:32:19.089273+08
wait_event_type |
wait_event |
state | active
backend_xid |
backend_xmin | 644
query | SELECT * FROM pg_stat_activity ORDER BY pid;
backend_type | client backend
3.您可以修改上述语句,使之按照连接建立的时间排序
test=#SELECT * FROM pg_stat_activity ORDER BY backend_start;
4.同时,您还可以按照上一次查询开始时间进行排序
test=#SELECT * FROM pg_stat_activity ORDER BY query_start;
- 查询等待事件的聚合视图
rudonx=# select state, wait_event, wait_event_type, count(*) from pg_stat_activity group by 1,2,3 order by wait_event;
输出如下:
-[ RECORD 1 ]---+--------------------
state |
wait_event | AutoVacuumMain
wait_event_type | Activity
count | 1
参考文档
[1] https://www.postgresql.org/docs/11/monitoring-stats.html