PostgreSQL 与检查点相关的参数分析
在PG中,checkpoint的触发有4中场景:
1. 执行checkpoint命令
2. 执行一些命令间接触发的checkpoint, 如 pg_start_backup, CREATE DATABASE, or pg_ctl stop|restart 及个别其他命令
3. 自上次checkpoint执行之后到了一定的时间
4. WAL日志数量累积到一定数量
控制checkpoint的参数有很多个,本文将介绍其中几个的含义及注意事项。
1. checkpoint_timeout
这个参数控制系统自动执行checkpoint之间的最大时间间隔,如果间隔越大那么恢复的时间越长。系统默认是5分钟。
注意: 这个参数控制的是自动检查点的执行间隔,检查点还有其他触发机制, 例如 当堆积的WAL大小超过max_wal_size的话会立马触发一个checkpoint
2. checkpoint_flush_after
当checkpoint执行的时候刷了超过这个参数指定值大小的数据之后,尝试强制执行一次OS的文件写(fsync)。 缺省值是 256kB 不带单位的话是要乘以8KB, 如设置为32则就是256KB
3. checkpoint_completion_target(浮点数):
手册上对这个参数的解释是“Specifies the target of checkpoint completion, asa fraction of total time between checkpoints”,含义是设定一个目标:完成检查点所需要的时间占检查点之间总时间的目标比例。checkpoint_completion_target越大,意味着checkpointer进程休眠的机会越多,以控制脏块刷盘的进度。例如这个参数值如果是0.9,而PG预期下一次checkpoint发生在25s之后,则由于checkpoint而引发的IO操作会被平均分配在25*0.9=22.5s之内完成。既可以在下一次checkpoint发生前完成本次检查点操作,又不致引发IO的负载尖峰。
有个公式可以估算这个参数的最优值: (checkpoint_timeout - 2min) / checkpoint_timeout
- 点赞
- 收藏
- 关注作者
评论(0)