PostgreSQL码农集散地

PostgreSQL 从库的刷脏策略

PostgreSQL 从库的刷脏策略

上一篇谈到了从库也有检查点

《PostgreSQL 从库也有检查点, 只不过它叫restartpoint》

本文来谈一下从库的刷脏策略控制.

在standby节点上,你可以通过以下参数调整shared buffer中脏页的持久化频率:

Background Writer相关参数(控制常规脏页刷新)

这些参数控制background writer进程的脏页刷新行为,该进程在standby节点上处于活跃状态  :

  • bgwriter_delay: 控制background writer活动轮次之间的延迟,默认200ms
  • bgwriter_lru_maxpages: 每轮最多写入的脏页数量,默认100个缓冲区
  • bgwriter_lru_multiplier: 基于近期需求计算需要写入的脏页数量的乘数,默认2.0
  • bgwriter_flush_after: 当写入数据超过此量时强制OS刷盘,默认256kB(Linux)

Restartpoint相关参数(控制检查点期间的脏页刷新)

在standby节点上,restartpoints替代了checkpoints   :

  • checkpoint_timeout: 控制restartpoint之间的最大时间间隔,默认5分钟
  • checkpoint_completion_target: 控制restartpoint完成目标占间隔时间的比例,默认0.9
  • checkpoint_flush_after: 在restartpoint期间,当写入数据超过此量时强制OS刷盘

WAL Writer相关参数

除了shared buffer, wal buffer 也可以单独控制.

  • wal_writer_delay: WAL writer刷盘频率,默认200ms
  • wal_writer_flush_after: WAL写入量超过此阈值时强制刷盘,默认1MB

Notes

  • 在standby节点上,checkpointer进程执行restartpoints而非checkpoints
  • Background writer在恢复期间正常工作,执行常规的块清理活动
  • Restartpoints只能在checkpoint记录处执行,因此频率受限于主节点的checkpoint间隔
  • 这些参数都可以在postgresql.conf中设置,大部分需要SIGHUP重载才能生效