Re: wal_keep_segments and max_wal_size

From: Kyotaro Horiguchi <horikyota(dot)ntt(at)gmail(dot)com>
To: akumar14871(at)gmail(dot)com
Cc: pgsql-general(at)lists(dot)postgresql(dot)org
Subject: Re: wal_keep_segments and max_wal_size
Date: 2021-07-07 08:45:47
Message-ID: 20210707.174547.1065503039595022417.horikyota.ntt@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

At Mon, 5 Jul 2021 16:45:09 +0530, Atul Kumar <akumar14871(at)gmail(dot)com> wrote in
> hi,
>
> (on postgres 9.6) I was just practicing to make my no. of wal files in
> pg_xlog directory to be the same/equal as I pass on wal_keep_segments
> paramater.
>
> say for example
> show wal_keep_segments;
> wal_keep_segments
> -------------------
> 125

This setting ensures to preserve this number of WAL files before the
current WAL location (shown by pg_current_wal_lsn()). This means the
WAL record is written to the roughly 126th live (not-recycled) file
after a checkpoint. Because the setting instructs checkpoints to leave
that number of WAL files regardless of other settings.

> so I want my wal files should not be grow in numbers more than 125 so
> for that I have changed the parameter of max_wal_size to 2 GB to limit
> the size of pg_xlog directory.
>
> show max_wal_size;
> max_wal_size
> --------------
> 2GB
> (1 row)

Note that max_wal_size is a soft limit, which could be exceeded for
certain cases for the reasons including wal_keep_segments.

https://www.postgresql.org/docs/9.6/runtime-config-wal.html#GUC-MAX-WAL-SIZE

> but I did some testing by bulk inserts then the number of wal files
> has grown more than 125.
>
> and the size of pg_xlog directory also reached to 2.7 GB.
>
> /data/apps/edb/as96/data/pg_xlog 04:05:08]$ ls | wc -l
> 173
>
> /data/apps/edb/as96/data 04:05:11]$ du -sh pg_xlog/
> 2.7G pg_xlog/

I'm not sure what value you set to checkpoint_completion_target but
suppose 0.5, the default, with that setting and max_wal_size = 2GB,
chekcpoint happens every 85 segments [*1]. Note that the 85 files
start after the 125 files kept in pg_wal by wal_keep_segments. So no
wonder even if the WAL files got more than 3GB.

*1: max_wal_size / (checkpoint_completion_target + 1.0) = 1365MB = 85 files

> I wonder why I faced such behavior bcz I limited the size of pg_xlog
> directory by setting max_wal_size to 2GB that should be equivalent to
> around 125 number of wal file in the pg_xlog directory.

Does the above explanation makes sense for you?

> please suggest how should I make both identical (wal_keep_segments and
> max_wal_size).

wal_keep_segments must be minimal amount required for pg_basebackup or
replication, otherwise set to zero.

If wal_keep_segments is greater than max_wal_size - [*1], that is, 43
16MB-files, max_wal_size would be overflown before XLOG-triggered
checkpoint caused by max_wal_size starts.

regards.

--
Kyotaro Horiguchi
NTT Open Source Software Center

In response to

Browse pgsql-general by date

  From Date Subject
Next Message 管竚 2021-07-07 10:38:13 Does psqlodbc_10_03_0000-x86(32bit) support PostgreSQL 12.6 64bit?
Previous Message Magnus Hagander 2021-07-07 08:43:41 Re: Need suggestions about live migration from PG 9.2 to PG 13