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;
列 | 类型 | 描述 |
---|---|---|
datid | oid | 这个后端连接到的数据库的 OID |
datname | name | 这个后端连接到的数据库的名称 |
pid | integer | 这个后端的进程 ID |
usesysid | oid | 登录到这个后端的用户的 OID |
usename | name | 登录到这个后端的用户的名称 |
application_name | text | 连接到这个后端的应用的名称 |
client_addr | inet | 连接到这个后端的客户端的 IP 地址。如果这个域为空,它表示客户端通过服务器机器上的一个 Unix 套接字连接或者这是一个内部进程(如自动清理)。 |
client_hostname | text | 已连接的客户端的主机名,由 client_addr 的反向 DNS 查找报告。这个域将只对 IP 连接非空,并且只有 log_hostname 被启用时才会非空。 |
client_port | integer | 客户端用以和这个后端通信的 TCP 端口号,如果使用 Unix 套接字则为-1 |
backend_start | timestamp with time zone | 这个进程被启动的时间,即客户端是什么时候连接到服务器的 |
xact_start | timestamp with time zone | 这个进程的当前事务被启动的时间,如果没有活动事务则为空。如果当前查询是它的第一个事务,这一列等于 query_start。 |
query_start | timestamp with time zone | 当前活动查询被开始的时间,如果 state 不是 active,这个域为上一个查询被开始的时间 |
state_change | timestamp with time zone state | 上一次被改变的时间 |
wait_event_type | text | 后端正在等待的事件类型,如果不存在则为 NULL。可能的值有: LWLockNamed:后端正在等待一个特定命名的轻量级锁。每一个这样的锁保护共享内存中的一个特定数据结构。wait_event 将包含该轻量级锁的名称。 LWLockTranche:后端正在等待一组相关轻量级锁中的一个。该组中的所有锁都执行一种相似的功能。wait_event 将标识这个组中锁的大体目的。 Lock:后端正在等待一个重量级锁。重量级锁,也称为锁管理器锁或者简单锁,主要保护 SQL 可见的对象,例如表。不过,它们也被用于确保特定内部操作的互斥,例如关系扩展。wait_event 将标识等待的锁的类型。 BufferPin:服务器进程正在等待访问一个数据缓冲区,而此时没有其他进程正在检查该缓冲区。如果另一个进程持有一个最终从要访问的缓冲区中读取数据的打开的游标,缓冲区 pin 等待可能会被拖延。 |
wait_event | text | 如果后端当前正在等待,则是等待事件的名称,否则为 NULL。 |
state | text | 这个后端的当前总体状态。可能的值是: active:后端正在执行一个查询。 idle:后端正在等待一个新的客户端命令。 idle in transaction:后端在一个事务中,但是当前没有正在执行一个查询。 idle in transaction (aborted):这个状态与 idle in transaction 相似,不过在该事务中的一个语句导致了一个错误。 fastpath function call:后端正在执行一个 fast-path 函数。 disabled:如果在这个后端中track_activities被禁用,则报告这个状态。 |
backend_xid | xid | 这个后端的顶层事务标识符(如果存在)。 |
backend_xmin | xid | 当前后端的 xmin 范围。 |
query | text | 这个后端最近查询的文本。如果 state 为 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);
窗口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);
窗口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();
窗口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 ;