pgsql: Fix "single value strategy" index deletion issue. - Mailing list pgsql-committers

From Peter Geoghegan
Subject pgsql: Fix "single value strategy" index deletion issue.
Date
Msg-id E1mSra6-0008VM-5q@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
Fix "single value strategy" index deletion issue.

It is not appropriate for deduplication to apply single value strategy
when triggered by a bottom-up index deletion pass.  This wastes cycles
because later bottom-up deletion passes will overinterpret older
duplicate tuples that deduplication actually just skipped over "by
design".  It also makes bottom-up deletion much less effective for low
cardinality indexes that happen to cross a meaningless "index has single
key value per leaf page" threshold.

To fix, slightly narrow the conditions under which deduplication's
single value strategy is considered.  We already avoided the strategy
for a unique index, since our high level goal must just be to buy time
for VACUUM to run (not to buy space).  We'll now also avoid it when we
just had a bottom-up pass that reported failure.  The two cases share
the same high level goal, and already overlapped significantly, so this
approach is quite natural.

Oversight in commit d168b666, which added bottom-up index deletion.

Author: Peter Geoghegan <pg@bowt.ie>
Discussion: https://postgr.es/m/CAH2-WznaOvM+Gyj-JQ0X=JxoMDxctDTYjiEuETdAGbF5EUc3MA@mail.gmail.com
Backpatch: 14-, where bottom-up deletion was introduced.

Branch
------
REL_14_STABLE

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

Modified Files
--------------
src/backend/access/nbtree/nbtdedup.c  | 36 +++++++++++++++++------------------
src/backend/access/nbtree/nbtinsert.c |  2 +-
src/include/access/nbtree.h           |  2 +-
3 files changed, 19 insertions(+), 21 deletions(-)


pgsql-committers by date:

Previous
From: Michael Paquier
Date:
Subject: Re: pgsql: Support "postgres -C" with runtime-computed GUCs
Next
From: Amit Kapila
Date:
Subject: pgsql: Add parent table name in an error in reorderbuffer.c.