• Alvaro Herrera's avatar
    Avoid pin scan for replay of XLOG_BTREE_VACUUM in all cases · f65b94f6
    Alvaro Herrera authored
    Replay of XLOG_BTREE_VACUUM during Hot Standby was previously thought to
    require complex interlocking that matched the requirements on the
    master. This required an O(N) operation that became a significant
    problem with large indexes, causing replication delays of seconds or in
    some cases minutes while the XLOG_BTREE_VACUUM was replayed.
    
    This commit skips the “pin scan” that was previously required, by
    observing in detail when and how it is safe to do so, with full
    documentation. The pin scan is skipped only in replay; the VACUUM code
    path on master is not touched here.
    
    No tests included. Manual tests using an additional patch to view WAL records
    and their timing have shown the change in WAL records and their handling has
    successfully reduced replication delay.
    
    This is a back-patch of commits 687f2cd7, 3e4b7d87, b6028426
    by Simon Riggs, to branches 9.4 and 9.5.  No further backpatch is
    possible because this depends on catalog scans being MVCC.  I (Álvaro)
    additionally updated a slight problem in the README, which explains why
    this touches the 9.6 and master branches.
    f65b94f6
README 38.9 KB