Thread: pgsql/src backend/utils/cache/catcache.c backe ...

pgsql/src backend/utils/cache/catcache.c backe ...

From
Tom Lane
Date:
CVSROOT:    /home/projects/pgsql/cvsroot
Module name:    pgsql
Changes by:    tgl@hub.org    01/06/17 23:35:07

Modified files:
    src/backend/utils/cache: catcache.c inval.c relcache.c
                             syscache.c
    src/include/utils: catcache.h

Log message:
    Do some restructuring to improve performance of the catcaches.  Teach
    CatalogCacheFlushRelation (formerly called SystemCacheRelationFlushed)
    how to distinguish tuples it should flush from those it needn't; this
    means a relcache flush event now only removes the catcache entries
    it ought to, rather than zapping the caches completely as it used to.
    Testing with the regression tests indicates that this considerably
    improves the lifespan of catcache entries.  Also, rearrange catcache
    data structures so that the limit on number of cached tuples applies
    globally across all the catcaches, rather than being per-catcache.
    It was a little silly to have the same size limit on both, say,
    pg_attribute caches and pg_am caches (there being only four possible
    rows in the latter...).  Doing LRU removal across all the caches
    instead of locally in each one should reduce cache reload traffic
    in the more heavily used caches and improve the efficiency of
    cache memory use.