Postgres的使用 - 2
pg_stat_activity
视图
在 Postgres 中,pg_stat_activity
是一个视图,每行对应一个服务器进程,用来显示进程当前活动有关的信息。因此,我们可以使用如下的查询来获取长时间执行的查询或者操作。
这个查询用到的字段在 9.2 版本就都支持了,9.6 版本还增加了其他字段,有需要可以自己对比一下文档:
- 9.2: https://www.postgresql.org/docs/9.2/static/monitoring-stats.html
- 9.6: https://www.postgresql.org/docs/9.6/static/monitoring-stats.html
用到的几个字段的含义如下:
datname
: 数据库名称。username
: 用户名。client_addr
: 客户端地址。state
: 连接的当前状态,一共有6种,这里需要显示的是其中3种非空闲的。backend_start
: 连接开始时间。xact_start
: 当前事务开始时间。EXTRACT(EPOCH FROM (now() - pgsa.xact_start)) AS xact_duration
: 计算当前事务进行了多久,单位是秒。query_start
: 当前查询开始的时间,一个事务内可能有多个查询。EXTRACT(EPOCH FROM (now() - pgsa.query_start)) AS query_duration
: 计算当前查询进行了多久,单位是秒。REGEXP_REPLACE(REPLACE(pgsa.query, CHR(10), ' '), '^SELECT.*FROM', 'FROM', 'i') AS query
: 查询语句的内容,这里把换行符替换成空格,而且会尝试把 SELECT … FROM 替换为 FROM(方便查看查询的是哪个表,不过如果语句过长,原始查询语句只会保留前 1024 个字符,这个是由 track_activity_query_size 参数决定的)。
本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。