pg_stat_activity视图表

pg_stat_activity视图属性

字段含义
query执行SQL语句
query_start查询开始时间
state运行状态 active:正在查询;idle:空闲;idle in transaction:后端是一个事务,但是尚未执行查询;idle in transaction(aborted):事务执行出现错误
datid数据库oid
datname数据库名称
procpid线程id
usesysid用户oid
usename用户名
waiting布尔型,为真则说明被锁
query_start时间戳,开始执行的时间
backend_start时间戳,线程开始的时间
client_addr客户端连接地址
client_port客户端连接端口
application_name应用名称
xact_start事务开始执行的时间
waiting_reason被锁的原因
state_change时间戳,state最后修改的时间

pg_stat_activity是进程相关视图,用于排除异常很重要的途径(show track_activities默认为on)
pg_stat_activity在11版本中,新增和减少了部分字段,如waiting,procpid,在13新增了leader_pid

##11.4
postgres=# \d+ pg_stat_activity
                                  View "pg_catalog.pg_stat_activity"
      Column      |           Type           | Collation | Nullable | Default | Storage  | Description
------------------+--------------------------+-----------+----------+---------+----------+-------------
 datid            | oid                      |           |          |         | plain    |
 datname          | name                     |           |          |         | plain    |
 pid              | integer                  |           |          |         | plain    |
 usesysid         | oid                      |           |          |         | plain    |
 usename          | name                     |           |          |         | plain    |
 application_name | text                     |           |          |         | extended |
 client_addr      | inet                     |           |          |         | main     |
 client_hostname  | text                     |           |          |         | extended |
 client_port      | integer                  |           |          |         | plain    |
 backend_start    | timestamp with time zone |           |          |         | plain    |
 xact_start       | timestamp with time zone |           |          |         | plain    |
 query_start      | timestamp with time zone |           |          |         | plain    |
 state_change     | timestamp with time zone |           |          |         | plain    |
 wait_event_type  | text                     |           |          |         | extended |
 wait_event       | text                     |           |          |         | extended |
 state            | text                     |           |          |         | extended |
 backend_xid      | xid                      |           |          |         | plain    |
 backend_xmin     | xid                      |           |          |         | plain    |
 query            | text                     |           |          |         | extended |
 backend_type     | text                     |           |          |         | extended |
View definition:
 SELECT s.datid,
    d.datname,
    s.pid,
    s.usesysid,
    u.rolname AS usename,
    s.application_name,
    s.client_addr,
    s.client_hostname,
    s.client_port,
    s.backend_start,
    s.xact_start,
    s.query_start,
    s.state_change,
    s.wait_event_type,
    s.wait_event,
    s.state,
    s.backend_xid,
    s.backend_xmin,
    s.query,
    s.backend_type
   FROM pg_stat_get_activity(NULL::integer) s(datid, pid, usesysid, application_name, state, query, wait_event_type, wait_event, xact_start, query_start, backend_start, state_change, client_addr, client_hostname, client_port, backend_xid, backend_xmin, backend_type, ssl, sslversion, sslcipher, sslbits, sslcompression, sslclientdn)
     LEFT JOIN pg_database d ON s.datid = d.oid
     LEFT JOIN pg_authid u ON s.usesysid = u.oid;

1.获取慢查询

  • now()-xact_start:事务截止当前已运行时间 now()-query_start:query截止当前已运行时间
  • pg_cancel_backend()函数:回滚未提及的事务,中断线程,但是不会中断会话
  • pg_terminate_backend()函数:回滚未提交的事务,中断会话
  • ||:连接符号
  • “::”:类型转换或者CASE
  • extract(field from source)函数:提取时间或者日期的子域,其中field常用的有
    a.年,月,日:year,month,day
    b.小时,分钟,秒:hour,min,second
    c.季度,世纪,星期:quarter,century,week
  • epoch:计算时间差
select 'select pg_cancel_backend('|| a0.pid || ');' as cancel_pid,
'select pg_terminate_backend('|| a0.pid || ');' as terminate_pid,
round(extract(epoch from (now()-xact_start))::numeric,1) as xact_second,
round(extract(epoch from (now()-query_start))::numeric,1) as xact_second,
datname,pid,usename,application_name,client_addr,client_port,xact_start,query_start,query
from pg_stat_activity a0
where 1=1 and a0.state<>'idle' and (a0.backend_xid is not null or backend_xmin is not null)
order by now()-xact_start;
  1. 查询当前正在运行的SQL
select datname,usename,query 
from pg_stat_activity
where current_query != '<IDLE>';

select pid,usename,datname,query,client_addr
from pg_catalog.pg_stat_activity
where pid<>pg_backend_pid() and state='active'
order by query;
  1. 查看耗时比较长的查询
select current_timestamp - query_start as runtime,datname,usename,query
from pg_stat_activity
where query != '<IDLE>'
order by runtime desc;
  1. 查看执行SQL是否被锁
select * from pg_locks;
  1. 查看锁的具体信息
select b.relname,a.pid,a.locktype,a.database,a.mode,a.relation
from pg_locks a
join pg_class b on a.relation = b.oid
where b.relname = 'tb_name';
  1. 通过cancel取消一个正在运行的query
select pg_cancel_backend(pid);
  1. 使用pg_terminate_backend来清理idle session
select pg_terminate_backend(pid);

资料来源:
1.https://blog.csdn.net/luojinbai/article/details/44586917
2.https://blog.csdn.net/weixin_30329623/article/details/101092530?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-0&spm=1001.2101.3001.4242

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值