千家信息网

怎么使用Postgresql的Checkpoint

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要讲解了"怎么使用Postgresql的Checkpoint",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"怎么使用Postgresql的Ch
千家信息网最后更新 2026年11月01日怎么使用Postgresql的Checkpoint

这篇文章主要讲解了"怎么使用Postgresql的Checkpoint",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"怎么使用Postgresql的Checkpoint"吧!

Checkpoint是什么?

checkpoint又名检查点,一般checkpoint会将某个时间点之前的dirty data全部写出到磁盘,以实现数据的一致性与完整性。目前各个流行的关系型数据库都具备checkpoint功能,其主要目的是为了缩短crash recovery time,以Oracle为例,在进行数据恢复时,会以最近的checkpoint为参考点执行事务roll forward,然后对没有commit的事务进行roll back。而在WAL机制的浅析中,也提过PostgreSQL在崩溃恢复时会以最近的checkpoint为基础,不断应用这之后的WAL日志。机制大致相同。

PG的检查点种类:

在xlog.h文件中,有如下代码对checkpoint进行了相应的分类:

/*

* OR-able request flag bits for checkpoints. The "cause" bits are used only

* for logging purposes. Note: the flags must be defined so that it's

* sensible to OR together request flags arising from different requestors.

*/

/* These directly affect the behavior of CreateCheckPoint and subsidiaries */

#define CHECKPOINT_IS_SHUTDOWN 0x0001 /* Checkpoint is for shutdown */

#define CHECKPOINT_END_OF_RECOVERY 0x0002 /* Like shutdown checkpoint,

* but issued at end of WAL

* recovery */

#define CHECKPOINT_IMMEDIATE 0x0004 /* Do it without delays */

#define CHECKPOINT_FORCE 0x0008 /* Force even if no activity */

/* These are important to RequestCheckpoint */

#define CHECKPOINT_WAIT 0x0010 /* Wait for completion */

/* These indicate the cause of a checkpoint request */

#define CHECKPOINT_CAUSE_XLOG 0x0020 /* XLOG consumption */

#define CHECKPOINT_CAUSE_TIME 0x0040 /* Elapsed time */

#define CHECKPOINT_FLUSH_ALL 0x0080 /* Flush all pages, including those

也就是说,以下几种情况会触发数据库操作系统做检查点操作:

数据库shutdown

数据库recovery完成

超级用户(其他用户不可)执行CHECKPOINT命令

XLOG日志量达到了触发checkpoint阈值

周期性地进行checkpoint

触发checkpoint时,需要刷新所有脏页,为了能够周期性的创建检查点,减少崩溃恢复时间,同时合并I/O,PostgreSQL提供了辅助进程checkpointer。它会周期性检测时间以及上面的XLOG日志量阈值是否达到,而周期时间以及XLOG日志量阈值可以通过参数来设置大小,接下来介绍下与checkpoints相关的参数。

checkpoints相关的参数

checkpoint_segments

当前最大的WAL日志文件段的数量,或者说,当系统的日志量达到这么多的时触发一个检查点,其缺省值为3, 每个段的大小是16M,因此大概64M日志触发一个检查点。调大这个数将延长系统崩溃后恢复的时间。

checkpoint_timeout

系统自动执行checkpoint之间的最大时间间隔。系统默认值是5分钟。

checkpoint_completion_target

手册上原文为"Specifies the target of checkpoint completion, asa fraction of total time between checkpoints",完成检查点所需要的时间/检查点之间总时间的目标比例*100%,它要求系统在恰当的时间内完成检查点,不要太快也不要太慢,过快将导致过于密集的IO, 形成IO风暴影响系统的平稳运行,过慢则可能引发持续性的IO, 降低系统性能。

checkpoint_warning

系统默认值是30秒,如果checkpoints的实际发生间隔小于该参数,将会在server log中写入写入一条相关信息。可以通过设置为禁用。

checkpoint相关的计算:

checkpoint_completion_target对计算起着决定性的作用

假如参数这样配置:

shared_buffers = 128GB # 1/4 内存

checkpoint_completion_target = 0.9 # checkpoint target duration, 0.0 - 1.0

checkpoint_timeout = 30min

max_wal_size = 256GB # 2*shared_buffers

min_wal_size = 64GB # shared_buffers * 1/2

1:极端假设128G全是脏数据

(128*1024)/(30*60*0.9)= 80.90864198 MB/s

要求磁盘的平均离散IO至少在这个之上,否则存在瓶颈,因为触发时刻,压力更大。

当然前提假设,128G都是脏的,如果脏数据不多,压力更小

2:假设周期内产生256G的WAL

那么

(256*1024)/ (30*60)= 145.6355556 MB/s

WAL为顺序IO

3:bgWriter

业务上写操作除了产生WAL,还有bgwriter周期性地写出脏块,因为一个块可能被多次修改,但是writer此时可能更少

(256*1024)/ (30*60)= 145.6355556 MB/s

综上,数据库写操作吞吐均值可能是 80.9 MB/s + 145.6 MB/s+ 145.6 MB/s=372MB/s

出发瞬间的压力可能超过此值。

感谢各位的阅读,以上就是"怎么使用Postgresql的Checkpoint"的内容了,经过本文的学习后,相信大家对怎么使用Postgresql的Checkpoint这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

数据 时间 检查点 系统 检查 日志 周期 参数 数据库 周期性 压力 阈值 学习 最大 之间 事务 内容 可以通过 大小 情况 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 新华互联网科技 互联网是第几次科技革命的成果 互联网科技财经 互联网科技会 互联网科技媒体 广州宏创互联网科技 迪茉互联网科技 唐信互联网科技 大连 猫创互联网科技 上海卓越科技 互联网 福州新华互联网科技学校 知乎 互联网对科技的发展 重庆互联网医院沙龙医盟信息科技 恒生互联网科技指数跳水 美国互联网科技实力 元气玛特互联网科技公司是外包吗 有人说阿里系是互联网科技企业 北京天晋互联网科技有限公司 唐山双旺合互联网科技产业园 绵阳真晨互联网科技有限公司 互联网科技公司 美国互联网保险保险科技 腾讯阿里互联网科技 极限挑战互联网科技 成都仁贤领冠互联网科技有限公司 华中科技有哪些互联网大佬 上海电发互联网科技有限公司 第三届互联网大会安防黑科技 安徽九吞吴互联网科技有限公司 互联网科技创业计划的风险分析
0