4.1 pg_stat_activity检查实时流量

视图结构

postgres=# \d+ pg_stat_activity

                        View "pg_catalog.pg_stat_activity"
      Column      |           Type           | Modifiers | 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 |
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
   FROM pg_database d,
    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, ssl, sslversion, sslcipher, sslbits, sslcompression, sslclientdn),
    pg_authid u
  WHERE s.datid = d.oid AND s.usesysid = u.oid;
类型描述
datidoid这个后端连接到的数据库的 OID
datnamename这个后端连接到的数据库的名称
pidinteger这个后端的进程 ID
usesysidoid登录到这个后端的用户的 OID
usenamename登录到这个后端的用户的名称
application_nametext连接到这个后端的应用的名称
client_addrinet连接到这个后端的客户端的 IP 地址。如果这个域为空,它表示客户端通过服务器机器上的一个 Unix 套接字连接或者这是一个内部进程(如自动清理)。
client_hostnametext已连接的客户端的主机名,由 client_addr 的反向 DNS 查找报告。这个域将只对 IP 连接非空,并且只有 log_hostname 被启用时才会非空。
client_portinteger客户端用以和这个后端通信的 TCP 端口号,如果使用 Unix 套接字则为-1
backend_starttimestamp with time zone这个进程被启动的时间,即客户端是什么时候连接到服务器的
xact_starttimestamp with time zone这个进程的当前事务被启动的时间,如果没有活动事务则为空。如果当前查询是它的第一个事务,这一列等于 query_start。
query_starttimestamp with time zone当前活动查询被开始的时间,如果 state 不是 active,这个域为上一个查询被开始的时间
state_changetimestamp with time zone state上一次被改变的时间
wait_event_typetext后端正在等待的事件类型,如果不存在则为 NULL。可能的值有:

LWLockNamed:后端正在等待一个特定命名的轻量级锁。每一个这样的锁保护共享内存中的一个特定数据结构。wait_event 将包含该轻量级锁的名称。

LWLockTranche:后端正在等待一组相关轻量级锁中的一个。该组中的所有锁都执行一种相似的功能。wait_event 将标识这个组中锁的大体目的。

Lock:后端正在等待一个重量级锁。重量级锁,也称为锁管理器锁或者简单锁,主要保护 SQL 可见的对象,例如表。不过,它们也被用于确保特定内部操作的互斥,例如关系扩展。wait_event 将标识等待的锁的类型。

BufferPin:服务器进程正在等待访问一个数据缓冲区,而此时没有其他进程正在检查该缓冲区。如果另一个进程持有一个最终从要访问的缓冲区中读取数据的打开的游标,缓冲区 pin 等待可能会被拖延。
wait_eventtext如果后端当前正在等待,则是等待事件的名称,否则为 NULL。
statetext这个后端的当前总体状态。可能的值是:

active:后端正在执行一个查询。

idle:后端正在等待一个新的客户端命令。

idle in transaction:后端在一个事务中,但是当前没有正在执行一个查询。

idle in transaction (aborted):这个状态与 idle in transaction 相似,不过在该事务中的一个语句导致了一个错误。

fastpath function call:后端正在执行一个 fast-path 函数。

disabled:如果在这个后端中track_activities被禁用,则报告这个状态。
backend_xidxid这个后端的顶层事务标识符(如果存在)。
backend_xminxid当前后端的 xmin 范围。
querytext这个后端最近查询的文本。如果 state 为 active,这个域显示当前正在执行的查询。在所有其他状态下,它显示上一个被执行的查询。

举例说明

active:表示当前用户正在执行查询等操作

窗口1执行一个耗时的查询,窗口2查看

-[ RECORD 2 ]----+------------------------------
datid            | 13269
datname          | postgres
pid              | 26301
usesysid         | 10
usename          | postgres
application_name | psql
client_addr      |
client_hostname  |
client_port      | -1
backend_start    | 2020-05-06 22:31:47.376029+08
xact_start       | 2020-05-06 23:14:49.643263+08
query_start      | 2020-05-06 23:14:49.643263+08
state_change     | 2020-05-06 23:14:49.643266+08
wait_event_type  |
wait_event       |
state            | active
backend_xid      |
backend_xmin     | 1674
query            | SELECT pg_sleep(1000);

idle:表示当前用户空闲

窗口1中止查询,窗口2查看

-[ RECORD 2 ]----+------------------------------
datid            | 13269
datname          | postgres
pid              | 26301
usesysid         | 10
usename          | postgres
application_name | psql
client_addr      |
client_hostname  |
client_port      | -1
backend_start    | 2020-05-06 22:31:47.376029+08
xact_start       |
query_start      | 2020-05-06 23:14:49.643263+08
state_change     | 2020-05-06 23:15:03.729816+08
wait_event_type  |
wait_event       |
state            | idle
backend_xid      |
backend_xmin     |
query            | SELECT pg_sleep(1000);

idle in transaction:表示当前用户在事务中

窗口1

postgres=# BEGIN;
BEGIN
postgres=# SELECT now();
              now
-------------------------------
 2020-05-06 23:22:39.321579+08
(1 row)

窗口2

-[ RECORD 2 ]----+------------------------------
datid            | 13269
datname          | postgres
pid              | 29857
usesysid         | 10
usename          | postgres
application_name | psql
client_addr      |
client_hostname  |
client_port      | -1
backend_start    | 2020-05-06 23:22:28.226023+08
xact_start       | 2020-05-06 23:22:39.321579+08
query_start      | 2020-05-06 23:22:58.152341+08
state_change     | 2020-05-06 23:22:58.152697+08
wait_event_type  |
wait_event       |
state            | idle in transaction
backend_xid      |
backend_xmin     |
query            | SELECT now();

idle in transaction (aborted): 表示当前用户在事务中,但是已经发生错误

窗口1

postgres=# BEGIN;
BEGIN
postgres=# SELECT 1 / 0;
ERROR:  division by zero

窗口2

-[ RECORD 2 ]----+------------------------------
datid            | 13269
datname          | postgres
pid              | 29857
usesysid         | 10
usename          | postgres
application_name | psql
client_addr      |
client_hostname  |
client_port      | -1
backend_start    | 2020-05-06 23:22:28.226023+08
xact_start       |
query_start      | 2020-05-06 23:25:52.317164+08
state_change     | 2020-05-06 23:25:52.31751+08
wait_event_type  |
wait_event       |
state            | idle in transaction (aborted)
backend_xid      |
backend_xmin     |
query            | SELECT 1 / 0;

一个进程等待的例子

窗口1

CREATE TABLE t_test (
    id int
);


postgres=# BEGIN;
BEGIN
postgres=# ALTER TABLE t_test ADD name text;
ALTER TABLE

窗口2,等待事务1

SELECT
    * 
FROM
    t_test ;

窗口3

-[ RECORD 2 ]----+----------------------------------
datid            | 13269
datname          | postgres
pid              | 29857
usesysid         | 10
usename          | postgres
application_name | psql
client_addr      |
client_hostname  |
client_port      | -1
backend_start    | 2020-05-06 23:22:28.226023+08
xact_start       | 2020-05-07 09:23:43.382926+08
query_start      | 2020-05-07 09:27:36.284084+08
state_change     | 2020-05-07 09:27:36.329821+08
wait_event_type  |
wait_event       |
state            | idle in transaction
backend_xid      | 1675
backend_xmin     |
query            | ALTER TABLE t_test ADD name text;
-[ RECORD 3 ]----+----------------------------------
datid            | 13269
datname          | postgres
pid              | 7319
usesysid         | 10
usename          | postgres
application_name | psql
client_addr      |
client_hostname  |
client_port      | -1
backend_start    | 2020-05-07 09:28:03.840612+08
xact_start       | 2020-05-07 09:28:10.677741+08
query_start      | 2020-05-07 09:28:10.677741+08
state_change     | 2020-05-07 09:28:10.677744+08
wait_event_type  | Lock
wait_event       | relation
state            | active
backend_xid      |
backend_xmin     | 1675
query            | SELECT * FROM t_test ;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值