LWLock: WALWrite
等待将 WAL buffer 写入磁盘。
PostgreSQL 等待事件档案
类别LWLock
事件
WALWrite
版本PG 13-18
证据3 个源码位置
官方描述译文
等待将 WAL buffer 写入磁盘。
| PG 13 | PG 14 | PG 15 | PG 16 | PG 17 | PG 18 |
|---|---|---|---|---|---|
| ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
触发机制
WALWriteLock 串行化共享 WAL 缓冲区写入,以及 written/flushed 位置的推进。等待者正在当前执行或协调这项工作的后端之后排队。
正常还是麻烦?
- 正常: 多个提交者协助写 WAL 时会短暂出现。
- 需要调查: WALWrite 持续出现且提交延迟上升,通常表示 WAL 写路径变慢,或吞吐跟不上 WAL 生成速度。
诊断 SQL
正在等待 LWLock/WALWrite 的会话
当前 LWLock 等待分布
这些会话的锁与关系上下文
处置建议
- 把 WAL write/sync 时间与提交延迟对照。
- 检查 WAL 文件系统/设备、虚拟化限速与检查点重叠。
- 降低突发性;只有存储证据确认后才调整 wal_writer 参数。
源码证据
- PostgreSQL 18.6 · src/backend/access/transam/xlog.c:2047 —
WALWrite - 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:320 —
WALWrite
关联控制项与信号
- GUC: [guc:wal_writer_delay] · [guc:wal_writer_flush_after] · [guc:synchronous_commit]
- 指标: [metric:waiting_sessions] · [metric:wait_event_share] · [metric:wal_write_time] · [metric:wal_sync_time] · [metric:commit_latency]
典型事故模式
云盘耗尽突发积分,WAL 写入变长,提交会话在 WALWrite 上排队,同步提交延迟同步恶化。