欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 手游 > 【PostgreSQL里的restartpoint重启点】

【PostgreSQL里的restartpoint重启点】

2024/10/23 23:31:43 来源:https://blog.csdn.net/weixin_47308871/article/details/142235031  浏览:    关键词:【PostgreSQL里的restartpoint重启点】

不知道大家有没有关注过,配置文件里archive_cleanup_command参数的注释部分有着这么一句"command to execute at every restartpoint",意思是在每个restartpoint时执行的命令。

image.png

提起checkpoint大家可能比较熟悉,对于这个restartpoint,可能有的人就不太了解了。

一个restartpoint相当于恢复期间的检查点,并建立恢复可以前滚而无需重新replay整个恢复日志的点。是在PostgreSQL-8.2提交的。(https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=e002836913ce69ca3e501a6d2c42296f1d103998)

从官方文档来看:

In archive recovery or standby mode, the server periodically performs restartpoints, which are similar to checkpoints in normal operation: the server forces all its state to disk, updates the pg_control file to indicate that the already-processed WAL data need not be scanned again, and then recycles any old WAL segment files in the pg_wal directory.

在存档恢复或备机模式下,服务器定期执行restartpoint,这与正常操作中的checkpoint类似:服务器将其所有状态强制到磁盘,更新pg_control文件以表明已经处理的WAL数据不需要再次扫描,然后回收pg_wal目录中的任何旧的WAL段文件。(https://www.postgresql.org/docs/current/wal-configuration.html)

官方文档里也有如下内容:

If executed during recovery, the CHECKPOINT command will force a restartpoint rather than writing a new checkpoint.

如果在恢复期间执行,CHECKPOINT命令将强制重新启动点,而不是写入新的检查点。(https://www.postgresql.org/docs/current/sql-checkpoint.html)

restartpoint和checkpoint的区别如下

  • checkpoint: 主库用的,用来定期刷脏及其他一些功能,crash后实例自动去找最新的一个 checkpoint ,从其中记录的 redopoint 的 WAL 日志位点开始向后进行redo;

  • restartpoint:存档恢复状态或备机用的,和主库的 checkpoint 功能类似,备库的 checkpointer 进程会定期的做 restartpoint 进行刷脏,并记录一些位点,如果 crash 了直接从对应的位点开始向后进行 redo。

restartpoint 触发机制

1.每经过checkpoint_timeout 的时间,主库做了checkpoint,备库触发restartpoint。
2.备机 WAL 大小快要超过 max_wal_size 参数设定的值。

在归档恢复或待机模式下,服务器定期执行重启点,这类似于正常操作中的检查点:服务器将其所有状态强制到磁盘,更新pg_control文件以指示已处理的WAL数据无需再次扫描,然后回收pg_WAL目录中的任何旧WAL段文件。

重新启动点的执行频率不能高于主检查点,因为重新启动点只能在检查点记录上执行。如果自上次重新启动点以来至少经过了checkpoint_timeout秒,或者WAL大小即将超过max_WAL_size,则当达到检查点记录时,将触发重新启动点。

然而,由于对何时可以执行重新启动点的限制,在恢复过程中,通常会超过max_wal_size,最多超过一个检查点周期的wal。(无论如何,max_wal_size从来都不是一个硬性限制,所以应该始终留出足够的空间以避免磁盘空间不足。)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com