这里列举几个问题,由此引发我们对 checkpoint 相关机制的思考:
我们日常操作Postgresql 数据库时,很多操作都会触发数据库的 checkpoint 事务(例如启动、关闭数据库,数据库超级管理员显式地执行 checkpoint 命令等)。那到底都有哪些行为或事件会触发 checkpoint 呢?
有些人使用 Postgresql 数据库时,可能会在数据库的 log 日志中发现类似于如下提示:
那为什么会出现这样的现象呢,发生这样的现象后,我们可以选择如何排查、解决此类问题?
下文简单总结了发生 checkpoint 的时机:
首先,checkpoint 有如下分类:
#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 */
#define CHECKPOINT_FLUSH_ALL 0x0