【0441】bgwriter 和 walwriter 都刷脏缓冲区 block到 disk file,两者有何差异?
1. bgwrite & walwrite 进程
PostgreSQL 中负责将缓冲区块(Buffer Blocks)中的脏数据(dirty data)写入磁盘文件的后台进程是 后台写入器(Background Writer)。此外,检查点进程(Checkpointer) 在检查点期间也会执行大量脏数据的刷写操作。
关键进程及函数:
-
Background Writer
- 作用:定期将脏缓冲区写入磁盘,减少检查点时的I/O压力。
- 核心函数:
- BackgroundWriterMain():后台写入器的主循环,在 src/backend/postmaster/bgwriter.c 中定义。
- BgBufferSync():负责具体刷写脏缓冲区的逻辑,通过调用 SyncOneBuffer() 逐个处理脏缓冲区。
-
Checkpointer
- 作用:在检查点发生时,强制将所有脏缓冲区写入磁盘。
- 核心函数:
- CheckpointerMain():检查点进程的主函数(位于 src/backend/postmaster/checkpointer.c)。
- CheckpointWrite():触发脏数据刷写,最终调用 BufferSync() 同步缓冲区。
</