当前位置: 首页 > 工具软件 > MinDB > 使用案例 >

max_wal_size、min_wal_size、wal_keep_segments参数详解

司徒运锋
2023-12-01

控制WAL日志的数量由这三个参数控制:

max_wal_size 
min_wal_size 
wal_keep_segments

而到PG13版本wal_keep_segments改为了wal_keep_size来控制。

假设pg_wal下的文件为:

000000A7000000040000005A
000000A7000000040000005B
000000A7000000040000005C
000000A7000000040000005D
000000A7000000040000005E
000000A7000000040000005F
000000A70000000400000060
000000A70000000400000061
000000A70000000400000062
000000A70000000400000063
000000A70000000400000064

假设当前正在写的WAL文件为000000A70000000400000060,则wal_keep_segments控制000000A7000000040000005A到000000A70000000400000060的个数,
而min_wal_size控制000000A70000000400000060到000000A70000000400000064,即这一段至少要保留min_wal_size的WAL日志。
如果min_wal_size + wal_keep_segments 大于了max_wal_size,那么WAL日志空间至少也会占用:min_wal_size + wal_keep_segments。

如果min_wal_size + wal_keep_segments小于max_wal_size,那么WAL日志空间尽量保持在max_wal_size。

所以从这个原理来说:min_wal_size不需要设置太大,生产库只需要为1G左右大小时就够用了,不需要太大。

而为了防止备库同步失败,应该设置一个较大的wal_keep_segments,WAL文件为16M大小,可把wal_keep_segments设置为500或更大。

然后把max_wal_size比 min_wal_size + wal_keep_segments略大一点就可以了。

而参数max_wal_size也会控制checkpoint发生的频繁程度:

target = (double) ConvertToXSegs(max_wal_size_mb) / (2.0 + CheckPointCompletionTarget);
如果checkpoint_completion_target设置为0.5时,则每写了 max_wal_size/2.5 的WAL日志时,就会发送一次checkpoint。

checkpoint_completion_target的范围为0~1,那么结果就是写的WAL的日志量超过: max_wal_size的1/3~1/2时,就会发生一次checkpoint。

 类似资料: