写前日志 (WAL)

通过在将更改写入数据文件本身之前,将对数据文件的更改记录到日志文件中来确保数据完整性的一种方法。

在处理数据时,PostgreSQL会先将事务记录到预写日志 (WAL,也称为事务日志),然后再将更改写入受影响的数据文件本身。这有助于确保数据完整性,因为在服务器崩溃的情况下,PostgreSQL可以从WAL日志中重放尚未应用于数据文件的任何更改。它还可以提高I/O性能,因为对WAL日志的写入是顺序进行的,使得将WAL日志同步到磁盘的成本低于同步单个数据页的成本。

WAL文件还可以用于将相同的更改应用到另一个数据库(“日志传输”)或作为备份解决方案的一部分,与基础备份结合使用。

在特定间隔(检查点)时,WAL日志中记录的事务将被写入各自的数据文件,并记录检查点在WAL日志中。WAL日志中检查点之前的内容不再需要,可以删除/回收(如果需要复制等,则可以归档)。

WAL文件存储在服务器数据目录的pg_walPostgreSQL 9.6及更早版本:pg_xlog)子目录中。

WAL功能是在PostgreSQL 7.1中引入的。

WAL文件大小

默认WAL文件大小为16MB。此值在src/include/pg_config_manual.h中定义为

/*
 * This is default value for wal_segment_size to be used at initdb when run
 * without --wal-segsize option. Must be a valid segment size.
 */
#define DEFAULT_XLOG_SEG_SIZE   (16*1024*1024)

正如代码注释所示,此值可以通过initdb使用--wal-segsize选项(仅限PostgreSQL 11及更高版本)进行覆盖。

此值由只读配置参数 wal_segment_size报告。

源代码

头文件src/include/access/xlog_internal.h包含许多用于处理WAL文件的有用定义和宏,包括

  • XLOG_FNAME_LEN

分类

PostgreSQL概念, PostgreSQL内部, WAL

另请参阅

检查点, LSN, XLogRecPtr, pg_waldump

反馈

提交任何关于“预写日志 (WAL)”的评论、建议或更正请在此处 提交