前置环境
lightdb@lt_test=# select version();
version
-----------------------------------------------------------------------------------------------------------
LightDB 13.8-22.3 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44), 64-bit
(1 row)
视图中的内容
通过命令\d+ pg_stat_activity;
查看视图详情:
lightdb@lt_test=# \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 |
leader_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.leader_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, ssl_client_dn, ssl_client_serial, ssl_issuer_dn, gss_auth, gss_princ, gss_enc, leader_pid)
LEFT JOIN pg_database d ON s.datid = d.oid
LEFT JOIN pg_authid u ON s.usesysid = u.oid;
官方文档对每列的描述如下:
列 | 类型 | 描述 |
---|---|---|
datid | oid | 此后端连接的数据库的OID |
datname | name | 此后端连接到的数据库的名称 |
pid | integer | 后端进程ID |
leader_pid | integer | 如果该进程是并行查询worker,则为并行组长进程ID。如果此进程是并行组长或不参与并行查询,则为NULL。 |
usesysid | oid | 登录到此后端的用户的OID |
usename | name | 登录到此后端的用户名 |
application_name | text | 连接到此后端的应用程序的名称 |
client_addr | inet | 连接到该后端的客户端IP地址。如果该字段为空,则表示客户端是通过服务器机器上的Unix套接字连接的,或者表示这是一个内部进程,例如autovacuum。 |
client_hostname | text | 连接的客户端的主机名,通过反向DNS对客户端(clienten)的解析报告。该字段仅在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_change | timestamp with time zone | 最后一次更改状态的时间 |
wait_event_type | text | 后端正在等待的事件类型(如果有的话);否则无效 |
wait_event | text | 如果后端当前正在等待,则等待事件名称,否则为NULL。 |
state | text | 此后端当前的总体状态。取值包括:
|
backend_xid | xid | 此后端的顶层事务标识符(如果有的话)。 |
backend_xmin | xid | 当前后端的xmin范围 |
query | text | 此后端最近查询的文本。如果state为active,这个字段显示当前正在执行的查询。 在所有其他状态下,它显示上一个被执行的查询。默认情况下,查询文本被截断为1024字节;该值可以通过参数track_activity_query_size更改。 |
backend_type | text | 当前后端的类型。可能的类型为 autovacuum launcher, autovacuum worker, logical replication launcher, logical replication worker, parallel worker, background writer, client backend, checkpointer, startup, walreceiver, walsender 和 walwriter. 除此以外,由扩展注册的后台worker可能有额外的类型。 |
测试
select * from pg_stat_activity;
返回结果如下:
active:表示当前用户正在执行查询等操作。
用另一个客户端再创建一个会话连接,再次select * from pg_stat_activity;
结果如下:
idle:表示当前用户空闲。
测试事务:
idle in transaction:表示当前用户在事务中。
测试事务中发生错误:
lightdb@lt_test=# begin;
BEGIN
lightdb@lt_test=*# select * from departments;
department_id | department_name | manager_id | location_id
---------------+-----------------+------------+-------------
(0 rows)
lightdb@lt_test=*# s
lightdb@lt_test-*# ;
ERROR: syntax error at or near "s"
LINE 1: s
^
idle in transaction (aborted): 表示当前用户在事务中,但是已经发生错误。
测试进程等待:
一个事务会话中修改表结构:
lightdb@lt_test=# begin;
BEGIN
lightdb@lt_test=*# alter table departments add column addr character varying;
ALTER TABLE
再起一个会话查询:
select * from departments;
wait_event_type:lock
服务器进程正在等待一个重量级锁。