diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2001-06-18 03:35:07 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2001-06-18 03:35:07 +0000 |
commit | 2c5aa2acb49d3aad560429295e3998e7aa7d7e7a (patch) | |
tree | 1f30a6323ec6b30478e0b44ac02ae442adeb500e /src/backend/utils/cache/inval.c | |
parent | 41c377f5c6689fa95949fd7abd2d3a0d600d1be0 (diff) | |
download | postgresql-2c5aa2acb49d3aad560429295e3998e7aa7d7e7a.tar.gz postgresql-2c5aa2acb49d3aad560429295e3998e7aa7d7e7a.zip |
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.
Diffstat (limited to 'src/backend/utils/cache/inval.c')
-rw-r--r-- | src/backend/utils/cache/inval.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/backend/utils/cache/inval.c b/src/backend/utils/cache/inval.c index b15eac025ea..91884a4b9c1 100644 --- a/src/backend/utils/cache/inval.c +++ b/src/backend/utils/cache/inval.c @@ -34,7 +34,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/cache/inval.c,v 1.43 2001/06/01 20:23:06 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/cache/inval.c,v 1.44 2001/06/18 03:35:07 tgl Exp $ * * Note - this code is real crufty... badly needs a rewrite to improve * readability and portability. (Shouldn't assume Oid == Index, for example) @@ -478,16 +478,20 @@ CacheIdInvalidate(Index cacheId, } /* - * ResetSystemCaches + * InvalidateSystemCaches * * This blows away all tuples in the system catalog caches and * all the cached relation descriptors (and closes their files too). * Relation descriptors that have positive refcounts are then rebuilt. + * + * We call this when we see a shared-inval-queue overflow signal, + * since that tells us we've lost some shared-inval messages and hence + * don't know what needs to be invalidated. */ static void -ResetSystemCaches(void) +InvalidateSystemCaches(void) { - ResetSystemCache(); + ResetCatalogCaches(); RelationCacheInvalidate(); } @@ -643,7 +647,7 @@ DiscardInvalid(void) elog(DEBUG, "DiscardInvalid called"); #endif /* defined(INVALIDDEBUG) */ - InvalidateSharedInvalid(CacheIdInvalidate, ResetSystemCaches); + InvalidateSharedInvalid(CacheIdInvalidate, InvalidateSystemCaches); } /* |