pgsql查看事務相關情況
2025-02-25
1. 查询表的锁和事务信息
PostgreSQL 提供了 pg_locks 系统视图,可以查看当前数据库中所有锁的状态,包括哪些事务正在锁定某个表或行。可以通过以下 SQL 查询某个表相关的锁信息:
SELECT
pid,
mode,
granted,
transactionid
FROM
pg_locks l
JOIN
pg_class c ON l.relation = c.oid
WHERE
c.relname = 'table_name';pid: 持有锁的进程 ID。mode: 锁的模式(例如 AccessShareLock、RowExclusiveLock 等)。granted: 是否已经授予锁。transactionid: 如果锁与事务相关联,则会显示事务 ID。
2. 查询活动事务
PostgreSQL 提供了 pg_stat_activity 视图,可以查看当前数据库中的所有活动事务。结合表名,可以进一步筛选出涉及某个表的事务:
SELECT
datname,
pid,
query,
state,
backend_start,
query_start
FROM
pg_stat_activity
WHERE
query LIKE '%table_name%';datname: 数据库名称。pid: 进程 ID。query: 当前执行的 SQL 语句。state: 事务状态(active、idle 等)。backend_start: 后端启动时间。query_start: 查询开始时间。
3. 查询表的访问统计
PostgreSQL 提供了 pg_stat_user_tables 视图,可以查看每个表的访问统计信息,包括读写次数等。
SELECT
relname,
seq_scan,
idx_scan,
n_tup_ins,
n_tup_upd,
n_tup_del,
n_live_tup,
n_dead_tup
FROM
pg_stat_user_tables
WHERE
relname = 'table_name';seq_scan: 表的顺序扫描次数。idx_scan: 表的索引扫描次数。n_tup_ins: 插入的元组数。n_tup_upd: 更新的元组数。n_tup_del: 删除的元组数。n_live_tup: 当前存活的元组数。n_dead_tup: 当前死亡的元组数。
4. 查询未提交事务
如果想查看当前未提交的事务,可以结合 pg_stat_activity 和 pg_locks:
SELECT
a.pid,
a.query,
l.mode,
l.granted
FROM
pg_stat_activity a
JOIN
pg_locks l ON a.pid = l.pid
JOIN
pg_class c ON l.relation = c.oid
WHERE
c.relname = 'your_table_name'
AND a.state = 'active';