pgsql: Improve typcache: cache negative lookup results, add invalidatio - Mailing list pgsql-committers

From Tom Lane
Subject pgsql: Improve typcache: cache negative lookup results, add invalidatio
Date
Msg-id E1XuPCW-00017Q-Hu@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
Improve typcache: cache negative lookup results, add invalidation logic.

Previously, if the typcache had for example tried and failed to find a hash
opclass for a given data type, it would nonetheless repeat the unsuccessful
catalog lookup each time it was asked again.  This can lead to a
significant amount of useless bufmgr traffic, as in a recent report from
Scott Marlowe.  Like the catalog caches, typcache should be able to cache
negative results.  This patch arranges that by making use of separate flag
bits to remember whether a particular item has been looked up, rather than
treating a zero OID as an indicator that no lookup has been done.

Also, install a credible invalidation mechanism, namely watching for inval
events in pg_opclass.  The sole advantage of the lack of negative caching
was that the code would cope if operators or opclasses got added for a type
mid-session; to preserve that behavior we have to be able to invalidate
stale lookup results.  Updates in pg_opclass should be pretty rare in
production systems, so it seems sufficient to just invalidate all the
dependent data whenever one happens.

Adding proper invalidation also means that this code will now react sanely
if an opclass is dropped mid-session.  Arguably, that's a back-patchable
bug fix, but in view of the lack of complaints from the field I'll refrain
from back-patching.  (Probably, in most cases where an opclass is dropped,
the data type itself is dropped soon after, so that this misfeasance has
no bad consequences.)

Branch
------
master

Details
-------
http://git.postgresql.org/pg/commitdiff/e384ed6cdec691e0f7c9a077d0fb2a357763c335

Modified Files
--------------
src/backend/utils/cache/typcache.c |  190 ++++++++++++++++++++++++------------
1 file changed, 127 insertions(+), 63 deletions(-)


pgsql-committers by date:

Previous
From: Fujii Masao
Date:
Subject: pgsql: Add tab-completion for ALTER TABLE ALTER CONSTRAINT in psql.
Next
From: Tom Lane
Date:
Subject: pgsql: Improve performance of OverrideSearchPathMatchesCurrent().