IPC 等待
IPC 表示协调:当前进程已经走到一个依赖另一个 PostgreSQL 进程或执行参与者的位置。对端可能是并行 worker、WAL receiver、checkpointer、archiver、复制进程,或共享内存协议里的另一个后端。
找到缺席的对端或阶段
等待者本身往往是健康的。先问谁应该向它发信号,再检查该参与者的状态。并行查询事件按阶段图阅读;复制事件按 sender/receiver 流水线阅读;检查点事件按全局屏障阅读。
- 正常: 并行计划汇合、检查点开始/完成、worker 启动或同步复制中的短暂等待。
- 关注: 前台等待者连续三次采样都停在同一阶段,而对端没有可见进展。
- 紧急: 对端已退出或被阻塞、队列无法排空、复制/故障切换停滞,或大量会话依赖同一个卡住的协调者。
值得先认出的事件
| 事件 | 对端或阶段 |
|---|---|
| BufferIo | 正在为共享缓冲区执行 I/O 的另一个后端 |
| ExecuteGather | 向 Gather 节点提供数据的子进程 |
| ParallelFinish | 并行 worker 到达计划完成点 |
| CheckpointDone | checkpointer 完成请求的检查点 |
| SyncRep | 远端同步备库确认 |
| WalReceiverWaitStart | startup 进程等待流复制数据 |
| MessageQueueReceive | 共享内存消息队列的生产者 |
| RecoveryPause | 恢复被运维策略有意暂停 |
常见误读
- 杀掉等待者无法修复已死亡或被阻塞的对端。
IPC/SyncRep是确认延迟;LWLock/SyncRep是共享队列/状态元数据上的竞争。- 许多并行等待名称本来就是屏障。真正的问题是所有参与者是否最终推进。
RecoveryPause可能完全是有意行为;先检查pg_is_wal_replay_paused()。
等待 Append 计划节点的子计划节点就绪。
等待 archive_cleanup_command 完成。
等待 archive_command 完成。
等待另一个后端终止。
等待备份所需的 WAL 文件成功归档。
等待后台工作进程关闭。
等待后台工作进程启动。
等待继续并行 B-tree 扫描所需的页号可用。
等待缓冲区 I/O 完成。
等待后端解除对检查点完成的阻塞。
等待后端解除对检查点启动的阻塞。
等待检查点完成。
等待检查点启动。
等待执行 Gather 计划节点时来自子进程的活动。
等待被选出的 Parallel Hash 参与者分配哈希表。
等待选出一个负责分配哈希表的 Parallel Hash 参与者。
等待其他 Parallel Hash 参与者完成哈希表加载。
等待被选出的 Parallel Hash 参与者分配初始哈希表。
等待选出一个负责分配初始哈希表的 Parallel Hash 参与者。
等待其他 Parallel Hash 参与者完成对 inner relation 的哈希处理。
等待其他 Parallel Hash 参与者完成对 outer relation 的分区。
等待选出一个 Parallel Hash 参与者,以决定后续 batch 扩容。
等待选出一个负责分配更多 batch 的 Parallel Hash 参与者。
等待被选出的 Parallel Hash 参与者决定后续 batch 扩容。
等待被选出的 Parallel Hash 参与者分配更多 batch。
等待其他 Parallel Hash 参与者完成重新分区。
等待选出一个负责分配更多 bucket 的 Parallel Hash 参与者。
等待被选出的 Parallel Hash 参与者完成更多 bucket 的分配。
等待其他 Parallel Hash 参与者完成将元组插入新 bucket。
等待逻辑复制 leader apply 进程向 parallel apply 进程发送数据。
等待逻辑复制 parallel apply 进程改变状态。
等待逻辑复制远端服务器发送用于初始表同步的数据。
等待逻辑复制远端服务器改变状态。
等待另一个进程附加到共享消息队列。
等待向共享消息队列写入协议消息。
等待从共享消息队列接收字节。
等待向共享消息队列发送字节。
等待 multixact 创建完成。
等待并行位图扫描完成初始化。
等待并行 CREATE INDEX 工作进程完成 heap 扫描。
等待并行工作进程完成计算。
等待所有后端处理完 barrier 事件。
等待 group leader 在事务结束时清除事务 ID。
等待备库提升。
等待解决与 vacuum cleanup 有关的恢复冲突。
等待解决与删除表空间有关的恢复冲突。
等待 recovery_end_command 完成。
等待恢复操作继续执行。
等待复制源变为非活动状态,以便将其删除。
等待复制槽变为非活动状态,以便将其删除。
等待 restore_command 完成。
等待为 READ ONLY DEFERRABLE 事务获取有效 snapshot。
等待同步复制期间来自远端服务器的确认。
等待 WAL receiver 退出。
等待上游服务器的 WAL flush 位置追上请求的起始点。
等待 startup 进程发送流复制的初始数据。
等待生成新的 WAL summary。
等待 group leader 在事务结束时更新事务状态。