• Andrew Gierth's avatar
    Avoid having vacuum set reltuples to 0 on non-empty relations in the · 1914c5ea
    Andrew Gierth authored
    presence of page pins, which leads to serious estimation errors in the
    planner.  This particularly affects small heavily-accessed tables,
    especially where locking (e.g. from FK constraints) forces frequent
    vacuums for mxid cleanup.
    
    Fix by keeping separate track of pages whose live tuples were actually
    counted vs. pages that were only scanned for freezing purposes.  Thus,
    reltuples can only be set to 0 if all pages of the relation were
    actually counted.
    
    Backpatch to all supported versions.
    
    Per bug #14057 from Nicolas Baccelli, analyzed by me.
    
    Discussion: https://postgr.es/m/20160331103739.8956.94469@wrigleys.postgresql.org
    1914c5ea
vacuumlazy.c 67.7 KB