检查点

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

一个 检查点 是一个操作,它将内存中所有“脏”(已更改或新的)数据页刷新到磁盘数据文件。它保证了在检查点之前写入 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

反馈

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