LWLock: LockManager
等待读取或更新“重量级”锁的信息。
PostgreSQL 等待事件档案
类别LWLock
事件
LockManager
版本PG 13-18
证据3 个源码位置
官方描述译文
等待读取或更新“重量级”锁的信息。
| PG 13 | PG 14 | PG 15 | PG 16 | PG 17 | PG 18 |
|---|---|---|---|---|---|
| ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
触发机制
重量级锁的账本存放在由 LockHashPartitionLock 分区保护的共享哈希表中。获取、授予、释放或检查大量重量级锁时,即使不存在 SQL 层锁冲突,也可能在分区锁上竞争。
正常还是麻烦?
- 正常: 普通关系锁与事务锁流量会带来小规模突发。
- 需要调查: 持续占比通常来自锁扇出:超大事务、大量分区、频繁 DDL,或成千上万的排队锁请求。
诊断 SQL
正在等待 LWLock/LockManager 的会话
当前 LWLock 等待分布
这些会话的锁与关系上下文
处置建议
- 按 PID 统计 pg_locks 行数并检查阻塞树。
- 定位一次触碰大量关系或分区的语句。
- 缩短事务并降低锁扇出;只有真实容量报错时才提高 max_locks_per_transaction。
源码证据
- PostgreSQL 18.6 · src/backend/storage/ipc/ipci.c:117 —
LockManager - 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:378 —
LockManager
关联控制项与信号
- GUC: [guc:max_locks_per_transaction] · [guc:max_connections]
- 指标: [metric:waiting_sessions] · [metric:wait_event_share] · [metric:locks_per_backend] · [metric:blocked_sessions]
典型事故模式
发布过程对数千分区执行 DDL,同时业务会话获取关系锁;在明显阻塞者出现前,内部锁表已经发生竞争。