• Peter Geoghegan's avatar
    Add wraparound failsafe to VACUUM. · 1e55e7d1
    Peter Geoghegan authored
    Add a failsafe mechanism that is triggered by VACUUM when it notices
    that the table's relfrozenxid and/or relminmxid are dangerously far in
    the past.  VACUUM checks the age of the table dynamically, at regular
    intervals.
    
    When the failsafe triggers, VACUUM takes extraordinary measures to
    finish as quickly as possible so that relfrozenxid and/or relminmxid can
    be advanced.  VACUUM will stop applying any cost-based delay that may be
    in effect.  VACUUM will also bypass any further index vacuuming and heap
    vacuuming -- it only completes whatever remaining pruning and freezing
    is required.  Bypassing index/heap vacuuming is enabled by commit
    8523492d, which made it possible to dynamically trigger the mechanism
    already used within VACUUM when it is run with INDEX_CLEANUP off.
    
    It is expected that the failsafe will almost always trigger within an
    autovacuum to prevent wraparound, long after the autovacuum began.
    However, the failsafe mechanism can trigger in any VACUUM operation.
    Even in a non-aggressive VACUUM, where we're likely to not advance
    relfrozenxid, it still seems like a good idea to finish off remaining
    pruning and freezing.   An aggressive/anti-wraparound VACUUM will be
    launched immediately afterwards.  Note that the anti-wraparound VACUUM
    that follows will itself trigger the failsafe, usually before it even
    begins its first (and only) pass over the heap.
    
    The failsafe is controlled by two new GUCs: vacuum_failsafe_age, and
    vacuum_multixact_failsafe_age.  There are no equivalent reloptions,
    since that isn't expected to be useful.  The GUCs have rather high
    defaults (both default to 1.6 billion), and are expected to generally
    only be used to make the failsafe trigger sooner/more frequently.
    
    Author: Masahiko Sawada <sawada.mshk@gmail.com>
    Author: Peter Geoghegan <pg@bowt.ie>
    Discussion: https://postgr.es/m/CAD21AoD0SkE11fMw4jD4RENAwBMcw1wasVnwpJVw3tVqPOQgAw@mail.gmail.com
    Discussion: https://postgr.es/m/CAH2-WzmgH3ySGYeC-m-eOBsa2=sDwa292-CFghV4rESYo39FsQ@mail.gmail.com
    1e55e7d1
vacuum.c 68.4 KB