• Peter Geoghegan's avatar
    Pass down "logically unchanged index" hint. · 9dc718bd
    Peter Geoghegan authored
    Add an executor aminsert() hint mechanism that informs index AMs that
    the incoming index tuple (the tuple that accompanies the hint) is not
    being inserted by execution of an SQL statement that logically modifies
    any of the index's key columns.
    
    The hint is received by indexes when an UPDATE takes place that does not
    apply an optimization like heapam's HOT (though only for indexes where
    all key columns are logically unchanged).  Any index tuple that receives
    the hint on insert is expected to be a duplicate of at least one
    existing older version that is needed for the same logical row.  Related
    versions will typically be stored on the same index page, at least
    within index AMs that apply the hint.
    
    Recognizing the difference between MVCC version churn duplicates and
    true logical row duplicates at the index AM level can help with cleanup
    of garbage index tuples.  Cleanup can intelligently target tuples that
    are likely to be garbage, without wasting too many cycles on less
    promising tuples/pages (index pages with little or no version churn).
    
    This is infrastructure for an upcoming commit that will teach nbtree to
    perform bottom-up index deletion.  No index AM actually applies the hint
    just yet.
    
    Author: Peter Geoghegan <pg@bowt.ie>
    Reviewed-By: default avatarVictor Yegorov <vyegorov@gmail.com>
    Discussion: https://postgr.es/m/CAH2-Wz=CEKFa74EScx_hFVshCOn6AA5T-ajFASTdzipdkLTNQQ@mail.gmail.com
    9dc718bd
brin.c 42.4 KB