Defer flushing of SLRU files.
authorThomas Munro <tmunro@postgresql.org>
Fri, 25 Sep 2020 06:49:43 +0000 (18:49 +1200)
committerThomas Munro <tmunro@postgresql.org>
Fri, 25 Sep 2020 07:00:15 +0000 (19:00 +1200)
commitdee663f7843902535a15ae366cede8b4089f1144
tree24858a312bb174c78ad7047ab52656a673f3de4e
parentca7f8e2b86e5f15a40b67e6199d714f45a467ff1
Defer flushing of SLRU files.

Previously, we called fsync() after writing out individual pg_xact,
pg_multixact and pg_commit_ts pages due to cache pressure, leading to
regular I/O stalls in user backends and recovery.  Collapse requests for
the same file into a single system call as part of the next checkpoint,
as we already did for relation files, using the infrastructure developed
by commit 3eb77eba.  This can cause a significant improvement to
recovery performance, especially when it's otherwise CPU-bound.

Hoist ProcessSyncRequests() up into CheckPointGuts() to make it clearer
that it applies to all the SLRU mini-buffer-pools as well as the main
buffer pool.  Rearrange things so that data collected in CheckpointStats
includes SLRU activity.

Also remove the Shutdown{CLOG,CommitTS,SUBTRANS,MultiXact}() functions,
because they were redundant after the shutdown checkpoint that
immediately precedes them.  (I'm not sure if they were ever needed, but
they aren't now.)

Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us> (parts)
Tested-by: Jakub Wartak <Jakub.Wartak@tomtom.com>
Discussion: https://postgr.es/m/CA+hUKGLJ=84YT+NvhkEEDAuUtVHMfQ9i-N7k_o50JmQ6Rpj_OQ@mail.gmail.com
16 files changed:
src/backend/access/transam/clog.c
src/backend/access/transam/commit_ts.c
src/backend/access/transam/multixact.c
src/backend/access/transam/slru.c
src/backend/access/transam/subtrans.c
src/backend/access/transam/xlog.c
src/backend/commands/async.c
src/backend/storage/buffer/bufmgr.c
src/backend/storage/lmgr/predicate.c
src/backend/storage/sync/sync.c
src/include/access/clog.h
src/include/access/commit_ts.h
src/include/access/multixact.h
src/include/access/slru.h
src/include/storage/sync.h
src/tools/pgindent/typedefs.list