检查点

所有已修改数据刷新到磁盘的点

一个 检查点 是一个操作,它将内存中所有“脏”(已修改或新的)数据页刷新到磁盘数据文件中。可以保证,在检查点之前写入 WAL 中的所有更改都存在于数据文件中。

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

自动检查点

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

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

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

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

请注意,无法禁用检查点进程,这样做也没有意义;但是,通过将 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 内部

另请参见

检查点进程重启点后台写入器CHECKPOINT (SQL 命令)pg_control_checkpoint()checkpoint_timeoutmax_wal_sizemin_wal_sizelog_checkpoints

反馈

提交关于 "检查点" 的任何评论、建议或更正 此处