PostgreSQL pg_stat_bgwriter 视图各个字段详解
解析 PostgreSQL pg_stat_bgwriter 各个字段:
select * from pg_stat_bgwriter;
-[ RECORD 1 ]---------+------------------------------
checkpoints_timed     | 13
checkpoints_req       | 1
checkpoint_write_time | 1
checkpoint_sync_time  | 1
buffers_checkpoint    | 0
buffers_clean         | 0
maxwritten_clean      | 0
buffers_backend       | 0
buffers_backend_fsync | 0
buffers_alloc         | 186
stats_reset           | 2025-11-01 19:03:31.207565+08
pg_stat_bgwriter 是一个非常有用的PostgreSQL系统视图,显示了后台写入进程(background writer)的统计信息,帮助了解数据库的I/O性能和检查点行为。
以下详细解析每个字段的含义:
字段解析
检查点相关
- 
checkpoints_timed | 13
- 按计划触发的检查点数量(基于
checkpoint_timeout参数) 
 - 按计划触发的检查点数量(基于
 - 
checkpoints_req | 1
- 按需触发的检查点数量(通常因为WAL日志快满了)
 
 - 
checkpoint_write_time | 1
- 检查点期间花费在写入数据的总时间(毫秒)
 
 - 
checkpoint_sync_time | 1
- 检查点期间花费在同步数据到磁盘的总时间(毫秒)
 
 
缓冲区相关
- 
buffers_checkpoint | 0
- 由检查点进程写入的缓冲区数量
 
 - 
buffers_clean | 0
- 由后台写入进程清理的缓冲区数量
 
 - 
maxwritten_clean | 0
- 后台写入进程因达到
bgwriter_lru_maxpages限制而停止清理操作的次数 
 - 后台写入进程因达到
 - 
buffers_backend | 0
- 由后端进程直接写入的缓冲区数量
 
 - 
buffers_backend_fsync | 0
- 后端进程被迫自己执行fsync操作的次数
 
 - 
buffers_alloc | 186
- 分配的缓冲区总数
 
 
统计重置
- stats_reset | 2025-11-01 19:03:31.207565+08
- 上次重置统计信息的时间戳
 
 
性能分析要点
从你的数据可以看出:
- 
检查点行为良好:
- 大部分检查点是按计划触发的(13次),只有1次是按需触发
 - 说明WAL日志配置合理,没有频繁的紧急检查点
 
 - 
I/O负载较轻:
- 所有缓冲区计数都为0或很低
 - 检查点写入和同步时间都很短(1毫秒)
 
 - 
内存使用正常:
- 分配了186个缓冲区,属于正常范围
 
 
监控建议
-- 查看检查点比例
SELECT checkpoints_timed,checkpoints_req,round(100 * checkpoints_req::numeric / (checkpoints_timed + checkpoints_req), 2) as req_checkpoint_pct
FROM pg_stat_bgwriter;
这个视图对于调优bgwriter_delay、bgwriter_lru_maxpages等参数非常有帮助。
