PostgreSQL 从库的刷脏策略
PostgreSQL 从库的刷脏策略
上一篇谈到了从库也有检查点
《PostgreSQL 从库也有检查点, 只不过它叫restartpoint》
本文来谈一下从库的刷脏策略控制.
在standby节点上,你可以通过以下参数调整shared buffer中脏页的持久化频率:
Background Writer相关参数(控制常规脏页刷新)
这些参数控制background writer进程的脏页刷新行为,该进程在standby节点上处于活跃状态 :
bgwriter_delay: 控制background writer活动轮次之间的延迟,默认200msbgwriter_lru_maxpages: 每轮最多写入的脏页数量,默认100个缓冲区bgwriter_lru_multiplier: 基于近期需求计算需要写入的脏页数量的乘数,默认2.0bgwriter_flush_after: 当写入数据超过此量时强制OS刷盘,默认256kB(Linux)
Restartpoint相关参数(控制检查点期间的脏页刷新)
在standby节点上,restartpoints替代了checkpoints :
checkpoint_timeout: 控制restartpoint之间的最大时间间隔,默认5分钟checkpoint_completion_target: 控制restartpoint完成目标占间隔时间的比例,默认0.9checkpoint_flush_after: 在restartpoint期间,当写入数据超过此量时强制OS刷盘
WAL Writer相关参数
除了shared buffer, wal buffer 也可以单独控制.
wal_writer_delay: WAL writer刷盘频率,默认200mswal_writer_flush_after: WAL写入量超过此阈值时强制刷盘,默认1MB
Notes
在standby节点上,checkpointer进程执行restartpoints而非checkpoints Background writer在恢复期间正常工作,执行常规的块清理活动 Restartpoints只能在checkpoint记录处执行,因此频率受限于主节点的checkpoint间隔 这些参数都可以在 postgresql.conf中设置,大部分需要SIGHUP重载才能生效