PostgreSQL数据库将数据库中发生的所有更改写入日志文件,然后再写入实际的数据文件。这些日志文件被称为WAL (Write-Ahead log,预写式日志)。在将这些更改刷新到磁盘之前,它们一直保存在内存中,并在需要时从内存中返回。由于多种原因,直接写入数据文件是一项成本很高的操作,并且需要定期执行。另一方面,向WAL文件写入并不那么昂贵,因为日志是所有更改的连续记录,这意味着记录只被追加到日志,而不进行搜索、更新等。
这可以确保在发生服务器故障时,可以从日志文件中恢复丢失的更改。另一方面,这些日志文件可能会消耗大量磁盘空间,如果在系统达到一致状态之前,有数百个日志文件可以重新应用,那么重新应用日志也会成为一项耗时的任务
为了减少这个时间并减少实现一致状态所需的 WAL 文件的数量,PostgreSQL 数据库有一种称为检查点(checkpoints)