• Heikki Linnakangas's avatar
    Improve scalability of WAL insertions. · 9a20a9b2
    Heikki Linnakangas authored
    This patch replaces WALInsertLock with a number of WAL insertion slots,
    allowing multiple backends to insert WAL records to the WAL buffers
    concurrently. This is particularly useful for parallel loading large amounts
    of data on a system with many CPUs.
    
    This has one user-visible change: switching to a new WAL segment with
    pg_switch_xlog() now fills the remaining unused portion of the segment with
    zeros. This potentially adds some overhead, but it has been a very common
    practice by DBA's to clear the "tail" of the segment with an external
    pg_clearxlogtail utility anyway, to make the WAL files compress better.
    With this patch, it's no longer necessary to do that.
    
    This patch adds a new GUC, xloginsert_slots, to tune the number of WAL
    insertion slots. Performance testing suggests that the default, 8, works
    pretty well for all kinds of worklods, but I left the GUC in place to allow
    others with different hardware to test that easily. We might want to remove
    that before release.
    
    Reviewed by Andres Freund.
    9a20a9b2
spin.c 2.35 KB