如何查看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.运行如下查询命令
````undefined
test=# SELECT * FROM pg_stat_activity where state='active' ORDER BY pid;
```
`
输出有如下内容:
````undefined
-[ 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.您可以修改上述语句,使之按照连接建立的时间排序
````undefined
test=#SELECT * FROM pg_stat_activity ORDER BY backend_start;
```
`
4.同时,您还可以按照上一次查询开始时间进行排序
````undefined
test=#SELECT * FROM pg_stat_activity ORDER BY query_start;
```
`

5. 查询等待事件的聚合视图

````undefined
rudonx=# select state, wait_event, wait_event_type, count(*) from pg_stat_activity group by 1,2,3 order by wait_event;
```
`
输出如下:
````undefined
-[ RECORD 1 ]---+--------------------
state           | 
wait_event      | AutoVacuumMain
wait_event_type | Activity
count           | 1
```
`
# 参考文档
[1] [https://www.postgresql.org/docs/11/monitoring-stats.html](https://www.postgresql.org/docs/11/monitoring-stats.html)

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