• Thomas Munro's avatar
    Defer flushing of SLRU files. · dee663f7
    Thomas Munro authored
    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: default avatarJakub Wartak <Jakub.Wartak@tomtom.com>
    Discussion: https://postgr.es/m/CA+hUKGLJ=84YT+NvhkEEDAuUtVHMfQ9i-N7k_o50JmQ6Rpj_OQ@mail.gmail.com
    dee663f7
sync.c 18.7 KB