作者:瀚高PG实验室(Highgo PG Lab)-Chrisx

WAL日志磁盘空间占用大小分析


文章目录


参数

通常情况下,pg_wal目录中的 WAL 段文件数量取决于min_wal_size、max_wal_size以及在之前的检查点周期中产生的 WAL 数量。

  • max_wal_size,两个检查点之间,wal可增长的最大大小,这是一个软限制。
  • min_wal_size,检查点后用来保留的,用于未来循环使用的wal文件。可以被用来确保有足够的 WAL 空间被保留来应付 WAL 使用的高峰

WAL空间使用情况如下

  1. 如果日志量大于max_wal_size,则WAL日志空间尽量保持在max_wal_size。因为会触发检查点,不需要的段文件将被移除直到系统回到这个限制以下。
  2. 如果日志量小于max_wal_size,则WAL日志空间至少保持min_wal_size。
  3. 通常情况下,WAL日志空间大小在min_wal_size和max_wal_size之间动态评估。该估计基于在以前的检查点周期中使用的WAL文件数的动态平均值。如果实际使用量超过估计值,动态平均数会立即增加。

如:

postgres=# select name,setting,unit from pg_settings where name like '%wal_size%';
     name     | setting | unit--------------+---------+------
 max_wal_size | 1024    | MB
 min_wal_size | 80      | MB(2 rows)
$ ll
total 81936
drwx------  3 pg126 pg126     4096 Apr 28 10:09 ./
drwx------ 20 pg126 pg126     4096 Apr 29 15:18 ../
-rw-------  1 pg126 pg126      337 Apr 14 14:02 000000010000000000000009.00000028.backup
-rw-------  1 pg126 pg126 16777216 Apr 28 16:09 00000001000000000000000A
-rw-------  1 pg126 pg126 16777216 Apr 14 13:52 00000001000000000000000B
-rw-------  1 pg126 pg126 16777216 Apr 14 13:52 00000001000000000000000C
-rw-------  1 pg126 pg126 16777216 Apr 14 14:02 00000001000000000000000D
-rw-------  1 pg126 pg126 16777216 Apr 14 14:02 00000001000000000000000E
drwx------  2 pg126 pg126     4096 Apr 28 10:09 archive_status/

pg_wal大小至少保留80MB的文件,也就是00000001000000000000000A-E 5个文件

执行一个大型操作,查看pg_wal大小超过了1GB

$ du -sm pg_wal
1329    pg_wal

执行检查点后,查看pg_wal大小为801MB,低于1GB

$ du -sm pg_wal/
801     pg_wal/

再次执行检查点后,查看pg_wal大小依然为801MB,与上一个检查点周期WAL大小一致

$ du -sm pg_wal/
801     pg_wal/

影响WAL大小的因素

其他情况下,会有以下因素影响WAL大小。

WAL异常增长,或WAL一直膨胀且超过max_wal_size,执行检查点后,WAL使用量未见降低或WAL日志不会被删除重用,需要排查以下因素。

  • 独立于max_wal_size之外,wal_keep_size(MB)+ 1 个最近的 WAL 文件将总是被保留。(pg13之前的版本是wal_keep_segments)
  • 启用了WAL 归档,旧的段在被归档之前不能被移除或者再利用。
  • 启用了复制槽功能,一个使用了复制槽的较慢或者失败的后备服务器也会导致WAL不能被删除或重用。
  • checkpoing未完成,
  • 长事务未提交。