From: | Thomas Munro <tmunro(at)postgresql(dot)org> |
---|---|
To: | pgsql-committers(at)lists(dot)postgresql(dot)org |
Subject: | pgsql: Avoid catalog lookups in RelationAllowsEarlyPruning(). |
Date: | 2019-08-28 08:44:03 |
Message-ID: | E1i2tYh-0002hj-2K@gemulon.postgresql.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | 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
------
master
Details
-------
https://git.postgresql.org/pg/commitdiff/720b59b55b84c8a346098cdbf3d34c7e554b0bf5
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(-)
From | Date | Subject | |
---|---|---|---|
Next Message | Thomas Munro | 2019-08-28 08:44:15 | pgsql: Avoid catalog lookups in RelationAllowsEarlyPruning(). |
Previous Message | Michael Paquier | 2019-08-28 06:39:13 | Re: pgsql: Fix 007_sync_rep.pl to notice failures in ALTER SYSTEM SET. |