检查点 (Checkpoint)

将所有已更改的数据刷新到磁盘的一个点

一个 检查点 操作,它会将内存中所有“脏的”(已更改或新的)数据页刷新到磁盘上的数据文件中。可以保证,直到检查点为止在 WAL 中记录的所有更改都已存在于数据文件中。

如果发生服务器崩溃,崩溃恢复过程将从 WAL 中恢复更改,从最近一个检查点之后立即开始,该检查点的位置记录在 pg_control 中。

自动检查点

检查点通常由 checkpointer 进程以固定的时间间隔自动执行(但是,如果自上次检查点以来系统一直处于空闲状态,则会跳过)。

检查点会导致 I/O 负载峰值,因此在调整 PostgreSQL 服务器性能时,检查点配置是一个重要的考虑因素。

以下参数会影响检查点的执行频率

此外,可以调整 checkpoint_completion_target 来分散检查点过程,从而减少检查点产生的 I/O 量。

请注意,无法禁用 checkpointer,这样做也没有任何意义;但是,通过将 checkpoint_timeout 设置为 1d(一天,最大值),并将 max_wal_size 设置为非常大的值,可以在很长一段时间内延迟定期检查点,例如用于测试目的。

文档部分 WAL 配置 提供了对检查点过程的绝佳概述。

手动检查点

数据库超级用户可以通过 CHECKPOINT 命令手动强制执行检查点,但在正常操作中通常不需要这样做。

检查点信息

有关当前检查点状态的信息可以通过 pg_control_checkpoint() 函数(PostgreSQL 9.6 及更高版本)或从 pg_control 文件中检索。

日志记录

默认情况下,例行检查点不被记录。将 log_checkpoints 设置为 “on” 以启用检查点日志记录(请参见该条目以获取示例)。

由检查点超时触发的检查点的典型日志输出

[2021-03-29 05:45:49 UTC] LOG:  checkpoint starting: time
[2021-03-29 05:46:04 UTC] LOG:  checkpoint complete: wrote 155 buffers (0.1%); 0 WAL file(s) added, 0 removed, 0 recycled; write=15.810 s, sync=0.013 s, total=15.904 s; sync files=63, longest=0.003 s, average=0.000 s; distance=783 kB, estimate=2315 kB

变更历史

进行中

分类

检查点管理/行政性能PostgreSQL 概念PostgreSQL 内部机制

另请参阅

checkpointerrestartpoint后台写入器CHECKPOINT (SQL 命令)pg_control_checkpoint()checkpoint_timeoutmax_wal_sizemin_wal_sizelog_checkpoints

反馈

提交有关“Checkpoint”的任何评论、建议或更正,请点击 此处