关于 checkpoint_segments 参数

关于 checkpoint_segments 参数

我对checkpoint_segments这个参数不是很了解,个人认为它表示wal日志文件的数量;我将该参数的值配置为64,但是在pg_xlog目录下可以看到131个文件。

有人能解释一下这个参数吗?

--detail
postgres=# show checkpoint_segments;
 checkpoint_segments 
---------------------
 64
(1 row)

[postgres@pg_root]$ cd $PGDATA
[postgres@pg_root]$ ls -lrt pg_xlog | wc -l
132

答案1

背景:WAL(预写日志)是一种确保数据库在崩溃时能够恢复的机制,无需在每次写入后刷新数据文件。基本上,在将任何更改写入数据文件之前,都会先将其记录下来。如果发生崩溃,可以使用日志重做未写入磁盘的任何更改。

pg_xlog 中的每个文件都是一个 WAL 段。checkpoint_segments和 一起checkpoint_timeout控制何时完成 WAL 检查点(在checkpoint_segments段填满或checkpoint_timeout经过几秒后(以先到者为准)完成检查点);检查点是保证数据文件已被刷新的时间点,因此重做过程不需要考虑检查点之前日志中的任何事务。

根据文档2 * checkpoint_segments + 1(上面的大部分内容都是从这里抄来的),在 8.3 之前,pg_xlog 目录中通常会有段文件;从 8.3 开始,预期数量是(2 + checkpoint_completion_target) * checkpoint_segments + 1(或者wal_keep_segments在 9.0 中,如果这个数字更大)。无论如何,对于checkpoint_segments64 个段文件,131 个段文件接近预期的最小值。

相关内容