Hi,
Currently postgres runs end-of-recovery(EOR) checkpoint in wait mode
meaning the server can take longer before it opens up for connections.
The EOR checkpoint, at times, can take a while if there was a lot of
work the server has done during crash recovery, say it replayed many
WAL records or created many snapshot or mapping files or dirtied so
many buffers and so on.
Since the server spins up checkpointer process [1] while the startup
process performs recovery, isn't it a good idea to make
end-of-recovery completely optional for the users or at least run it
in non-wait mode so that the server will be available faster. The next
checkpointer cycle will take care of performing the EOR checkpoint
work, if user chooses to skip the EOR or the checkpointer will run EOR
checkpoint in background, if user chooses to run it in the non-wait
mode (without CHECKPOINT_WAIT flag). Of course by choosing this
option, users must be aware of the fact that the extra amount of
recovery work that needs to be done if a crash happens from the point
EOR gets skipped or runs in non-wait mode until the next checkpoint.
But the advantage that users get is the faster server availability.
Thanks a lot Thomas for the internal discussion.
Thoughts?
[1]
commit 7ff23c6d277d1d90478a51f0dd81414d343f3850
Author: Thomas Munro <tmunro@postgresql.org>
Date: Mon Aug 2 17:32:20 2021 +1200
Run checkpointer and bgwriter in crash recovery.
Regards,
Bharath Rupireddy.