pgsql: Avoid catalog lookups in RelationAllowsEarlyPruning(). - Mailing list pgsql-committers

From Thomas Munro
Subject pgsql: Avoid catalog lookups in RelationAllowsEarlyPruning().
Date
Msg-id E1i2tZO-0002j8-Gy@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
Avoid catalog lookups in RelationAllowsEarlyPruning().

RelationAllowsEarlyPruning() performed a catalog scan, but is used
in two contexts where that was a bad idea:

1.  In heap_page_prune_opt(), which runs very frequently in some large
    scans.  This caused major performance problems in a field report
    that was easy to reproduce.

2.  In TestForOldSnapshot(), which runs while we hold a buffer content
    lock.  It's not clear if this was guaranteed to be free of buffer
    deadlock risk.

The check was introduced in commit 2cc41acd8 and defended against a
real problem: 9.6's hash indexes have no page LSN and so we can't
allow early pruning (ie the snapshot-too-old feature).  We can remove
the check from all later releases though: hash indexes are now logged,
and there is no way to create UNLOGGED indexes on regular logged
tables.

If a future release allows such a combination, it might need to put
a similar check in place, but it'll need some more thought.

Back-patch to 10.

Author: Thomas Munro
Reviewed-by: Tom Lane, who spotted the second problem
Discussion: https://postgr.es/m/CA%2BhUKGKT8oTkp5jw_U4p0S-7UG9zsvtw_M47Y285bER6a2gD%2Bg%40mail.gmail.com
Discussion: https://postgr.es/m/CAA4eK1%2BWy%2BN4eE5zPm765h68LrkWc3Biu_8rzzi%2BOYX4j%2BiHRw%40mail.gmail.com

Branch
------
REL_10_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/eeb68c1cddf3cdbfbd543a7aa24e6cbbe0e31b16

Modified Files
--------------
src/backend/utils/cache/relcache.c | 42 --------------------------------------
src/include/utils/rel.h            |  1 -
src/include/utils/snapmgr.h        |  1 -
3 files changed, 44 deletions(-)


pgsql-committers by date:

Previous
From: Thomas Munro
Date:
Subject: pgsql: Avoid catalog lookups in RelationAllowsEarlyPruning().
Next
From: Heikki Linnakangas
Date:
Subject: pgsql: Fix overflow check and comment in GIN posting list encoding.