pgsql: Avoid reltuples distortion in very small tables. - Mailing list pgsql-committers

From Peter Geoghegan
Subject pgsql: Avoid reltuples distortion in very small tables.
Date
Msg-id E1oP4qG-000HhB-OB@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
Avoid reltuples distortion in very small tables.

Consistently avoid trusting a sample of only one page at the point that
VACUUM determines a new reltuples for the target table (though only when
the table is larger than a single page).  This is follow-up work to
commit 74388a1a, which added a heuristic to prevent reltuples from
becoming distorted by successive VACUUM operations that each scan only a
single heap page (which was itself more or less a bugfix for an issue in
commit 44fa8488, which simplified VACUUM's handling of scanned pages).

The original bugfix commit did not account for certain remaining cases
that where not affected by its "2% of total relpages" heuristic.  This
happened with relations that are small enough that just one of its pages
exceeded the 2% threshold, yet still big enough for VACUUM to deem
skipping most of its pages via the visibility map worthwhile.  reltuples
could still become distorted over time with such a table, at least in
scenarios where the VACUUM command is run repeatedly and without the
table itself ever changing.

Author: Peter Geoghegan <pg@bowt.ie>
Discussion: https://postgr.es/m/CAH2-Wzk7d4m3oEbEWkWQKd+gz-eD_peBvdXVk1a_KBygXadFeg@mail.gmail.com
Backpatch: 15-, where the rules for scanned pages changed.

Branch
------
REL_15_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/4496020e6dfaffe8217e4d3f85567bb2b6927b45

Modified Files
--------------
src/backend/commands/vacuum.c | 26 ++++++++++----------------
1 file changed, 10 insertions(+), 16 deletions(-)


pgsql-committers by date:

Previous
From: Peter Eisentraut
Date:
Subject: pgsql: Move a definition inside a header file
Next
From: David Rowley
Date:
Subject: pgsql: Remove shadowed local variables that are new in v15