LWLock: WALBufMapping
等待替换 WAL buffer 中的页面。
PostgreSQL 等待事件档案
类别LWLock
事件
WALBufMapping
版本PG 13-18
证据3 个源码位置
官方描述译文
等待替换 WAL buffer 中的页面。
| PG 13 | PG 14 | PG 15 | PG 16 | PG 17 | PG 18 |
|---|---|---|---|---|---|
| ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
触发机制
WALBufMappingLock 协调 WAL 页号与有限 wal_buffers 槽位之间的映射。后端推进到新 WAL 页或替换缓冲页时需要取得此锁。
正常还是麻烦?
- 正常: WAL 生成推进并跨越缓冲页时会短暂出现。
- 需要调查: 持续竞争说明 WAL 生成换页速度超过写路径推进速度,常见于写突发或检查点期间。
诊断 SQL
正在等待 LWLock/WALBufMapping 的会话
当前 LWLock 等待分布
这些会话的锁与关系上下文
处置建议
- 关联 WAL 字节量、WAL 写入与检查点时间。
- 检查写突发期间 wal_buffers 是否反复耗尽。
- 先平滑写突发并解决 WAL 设备延迟,再调整缓冲区大小。
源码证据
- PostgreSQL 18.6 · src/backend/access/transam/xlog.c:1999 —
WALBufMapping - 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:319 —
WALBufMapping
关联控制项与信号
- GUC: [guc:wal_buffers] · [guc:checkpoint_timeout] · [guc:max_wal_size]
- 指标: [metric:waiting_sessions] · [metric:wait_event_share] · [metric:wal_bytes] · [metric:wal_write_time]
典型事故模式
批量导入把 WAL 生成推到极限,同时 WAL 设备发生停顿,导致频繁的 WAL 缓冲页重映射。