PostgreSQL 与检查点相关的参数分析

举报
zenith 发表于 2021/01/15 08:18:37 2021/01/15
【摘要】 本文介绍了pg的检查点触发机制以及控制检查点的几个参数的含义。

在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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。