postgres_exporter默认启用pg_stat_bgwriter指标采集,关键检查点指标包括timed/requested次数、写入/同步耗时及刷出页数;需验证权限、数据非零、抓取间隔合理,并用rate()函数监控告警。

PostgreSQL 的 pg_stat_bgwriter 视图提供了后台写进程(background writer)的关键运行指标,其中检查点(checkpoint)相关统计对性能调优和稳定性监控至关重要。使用 postgres_exporter 采集这些指标时,需确保其配置正确、指标可被 Prometheus 正确抓取,并能反映真实负载情况。
确认 pg\_stat\_bgwriter 指标是否被 postgres\_exporter 启用
postgres_exporter 默认启用 pg_stat_bgwriter 的采集,对应指标前缀为 pg_stat_bgwriter_。常见检查点相关指标包括:
-
pg_stat_bgwriter_checkpoints_timed_total:按时间触发的检查点次数 -
pg_stat_bgwriter_checkpoints_requested_total:因 WAL 量或手动触发的检查点次数 -
pg_stat_bgwriter_checkpoint_write_time_seconds_total:检查点写入耗时总和(秒) -
pg_stat_bgwriter_checkpoint_sync_time_seconds_total:检查点同步耗时总和(秒) -
pg_stat_bgwriter_buffers_checkpoint_total:检查点期间刷出的缓冲区页数
若在 Prometheus 中查不到这些指标,检查 postgres_exporter 启动日志是否提示 pg_stat_bgwriter 被禁用(如通过 --disable-default-metrics 或自定义 --extend.query-path 未包含该视图),或确认连接用户具备 SELECT 权限(通常需要 pg_monitor 角色或等效权限)。
验证数据库端数据是否正常生成
直接在 PostgreSQL 中执行以下查询,确认源数据存在且非全零:
SELECT checkpoints_timed, checkpoints_req, checkpoint_write_time, checkpoint_sync_time, buffers_checkpoint FROM pg_stat_bgwriter;
若返回值长期为 0 或长时间无变化,可能原因包括:
华友协同办公管理系统(华友OA),基于微软最新的.net 2.0平台和SQL Server数据库,集成强大的Ajax技术,采用多层分布式架构,实现统一办公平台,功能强大、价格便宜,是适用于企事业单位的通用型网络协同办公系统。 系统秉承协同办公的思想,集成即时通讯、日记管理、通知管理、邮件管理、新闻、考勤管理、短信管理、个人文件柜、日程安排、工作计划、工作日清、通讯录、公文流转、论坛、在线调查、
-
checkpoint_timeout设置过大(如数小时),导致定时检查点极少发生 -
max_wal_size过高 + 写入量小,WAL 增长缓慢,难以触发基于 WAL 的检查点 - 数据库处于只读状态或几乎无写入,自然不触发检查点
建议结合 pg_stat_database 的 xact_commit 和 blks_written 判断写入活跃度,排除“无数据可采”的假阴性。
检查 exporter 抓取间隔与指标突变敏感性
pg_stat_bgwriter 是累计计数器(counter 类型),postgres_exporter 会将其暴露为 Prometheus counter 指标。Prometheus 依赖 rate() 或 increase() 函数计算速率,因此:
- 抓取间隔(
scrape_interval)不宜过长(推荐 ≤ 30s),否则可能错过短时高频检查点 - 若检查点非常密集(如每几秒一次),需确保
rate(pg_stat_bgwriter_checkpoints_requested_total[5m])时间窗口覆盖至少两个样本点,避免rate()返回 0 - 注意:
checkpoints_timed和checkpoints_req是互斥增长的,但总量应接近checkpoints字段(旧版本视图字段名略有差异,v12+ 已统一为上述命名)
常用监控告警建议
基于这些指标,可构建以下实用告警逻辑:
-
检查点过于频繁:
rate(pg_stat_bgwriter_checkpoints_requested_total[1h]) > 60(即平均每分钟超 1 次),暗示max_wal_size过小或写入压力异常 -
检查点耗时过长:
rate(pg_stat_bgwriter_checkpoint_write_time_seconds_total[1h]) / rate(pg_stat_bgwriter_checkpoints_timed_total[1h]) > 30(单次平均写入超 30 秒),可能影响响应延迟 -
同步阶段瓶颈:
rate(pg_stat_bgwriter_checkpoint_sync_time_seconds_total[1h]) > 5(每小时同步耗时超 5 秒),说明存储 fsync 性能不足 -
检查点主导写入:
rate(pg_stat_bgwriter_buffers_checkpoint_total[1h]) / (rate(pg_stat_bgwriter_buffers_clean_total[1h]) + rate(pg_stat_bgwriter_buffers_backend_total[1h]) + 1) > 2,表示后台写进程主要忙于检查点而非常规刷脏,可能降低整体 I/O 效率
不复杂但容易忽略。









