如何查看PostgreSQL正在运行的查询

问题描述

我需要查看那些查询正在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;
  1. 查询等待事件的聚合视图
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

117
0
0
0
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论