Re: max_wal_size

From: p(dot)luzanov(at)postgrespro(dot)ru
To: "David G(dot) Johnston" <david(dot)g(dot)johnston(at)gmail(dot)com>
Cc: pluzanov(at)postgrespro(dot)ru, pgsql-docs(at)lists(dot)postgresql(dot)org
Subject: Re: max_wal_size
Date: 2020-05-28 09:21:14
Message-ID: b8e12875ebec9e6d3107df5fa1129e1e@postgrespro.ru
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-docs

David,

> I think part of the issue is your operating with a mental model of
> this contrary to the one the documentation was written for.

I made this assumption(checkpoints triggered by size,
checkpoint_completion_target=1) only for simplifying example.
(Although there is a practical task: calculate the possible approximate
size of all WAL files. This is especially important for versions prior
to 11, where WAL files were stored for the previous checkpoint.)

> In any case "grow to" means that it doesn't matter whether at the end
> of the previous checkpoint 1gb or 9gb were in use - once the usage
> goes "up to" 10gp the automatic checkpoint will trigger. If the word
> "to" wasn't there your interpretation would be correct. Its a fair
> argument to say such an important distinction shouldn't be placed on
> the word "to" but it isn't wrong.

Thank you for an explanation. But give me another chance to explain.

Now we have the glossary. According to the glossary, a checkpoint has
two meanings.

The first meaning is that this is a point:
"A point in the WAL sequence at which it is guaranteed that the heap and
index data files have been updated with all information from shared
memory modified before that checkpoint; a checkpoint record is written
and flushed to WAL to mark that point."

Simple illustration:
A B C
WAL |-----------|-----------|-----------|----------->

Points A,B,C are records in the WAL.

The second meaning is that this is an action (performed by checkpointer
process or CP):
"A checkpoint is also the act of carrying out all the actions that are
necessary to reach a checkpoint as defined above."

Add a process to the illustration. Checkpoint_completion_target here is
the default value of 0.5:

A B C
WAL |-----------|-----+-----|-----+-----|-----+----->

a b c
CP +-----+ +-----+ +-----+
b e b e b e

Checkpointer process for point A starts at a(b) and ends at a(e).
At the end of the work, CP makes a WAL record(plus symbol on WAL line).

Back to the max_wal_size description:
"Maximum size to let the WAL grow to between automatic WAL checkpoints."

As I understand now, this is true when we talk about the checkpoint as a
process.
"Maximum size to let the WAL grow to between a(b) and b(e), between b(b)
and c(e), etc".

But this not true when we talk about the checkpoint as a point.
"Maximum size to let the WAL grow to between A and B".

My concerns that someone reading the description of the parameter may
confuse the two meanings of checkpoint: as a point and as a process.
After all, this happened to me.

-----
Pavel Luzanov
Postgres Professional: http://www.postgrespro.com
The Russian Postgres Company

In response to

Responses

Browse pgsql-docs by date

  From Date Subject
Next Message David G. Johnston 2020-05-28 14:46:39 Re: max_wal_size
Previous Message Thomas Munro 2020-05-27 23:43:45 Re: wal_init_zero and wal_recycle