LWLock: ProcArray
等待访问共享的进程级数据结构(通常用于获取快照或报告会话的事务 ID)。
PostgreSQL 等待事件档案
类别LWLock
事件
ProcArray
版本PG 13-18
证据3 个源码位置
官方描述译文
等待访问共享的进程级数据结构(通常用于获取快照或报告会话的事务 ID)。
| PG 13 | PG 14 | PG 15 | PG 16 | PG 17 | PG 18 |
|---|---|---|---|---|---|
| ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
触发机制
ProcArrayLock 保护用于快照、事务可见性与事务结束处理的共享 PGPROC/PGXACT 数组。获取快照以及更新进程事务状态都必须短暂经过它协调。
正常还是麻烦?
- 正常: 大量事务开始与结束的繁忙 OLTP 系统中,短暂等待属于预期。
- 需要调查: 持续竞争可能伴随极高连接数、大量快照、长事务,或事务集中结束。
诊断 SQL
正在等待 LWLock/ProcArray 的会话
当前 LWLock 等待分布
这些会话的锁与关系上下文
处置建议
- 测量活动后端与事务年龄,不要只看总连接数。
- 找出让可见性边界停滞的长事务与 idle in transaction 会话。
- 使用连接池、缩短事务,并避免大量微事务同步突发。
源码证据
- PostgreSQL 18.6 · src/backend/access/transam/xlog.c:6121 —
ProcArray - PostgreSQL 18.6 · src/backend/storage/lmgr/lwlock.c:739 —
pgstat_report_wait_start - PostgreSQL 18.6 · src/backend/utils/activity/wait_event_names.txt:316 —
ProcArray
关联控制项与信号
- GUC: [guc:max_connections] · [guc:idle_in_transaction_session_timeout]
- 指标: [metric:waiting_sessions] · [metric:wait_event_share] · [metric:active_backends] · [metric:oldest_transaction_age]
典型事故模式
应用重连风暴制造数千个短事务,同时报表查询持有旧快照,放大了 ProcArray 流量。