pgsql: Sync up our various ways of estimating pg_class.reltuples.

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Sync up our various ways of estimating pg_class.reltuples.
Date: 2018-03-22 19:47:52
Message-ID: E1ez6Bk-0000eC-MZ@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Sync up our various ways of estimating pg_class.reltuples.

VACUUM thought that reltuples represents the total number of tuples in
the relation, while ANALYZE counted only live tuples. This can cause
"flapping" in the value when background vacuums and analyzes happen
separately. The planner's use of reltuples essentially assumes that
it's the count of live (visible) tuples, so let's standardize on having
it mean live tuples.

Another issue is that the definition of "live tuple" isn't totally clear;
what should be done with INSERT_IN_PROGRESS or DELETE_IN_PROGRESS tuples?
ANALYZE's choices in this regard are made on the assumption that if the
originating transaction commits at all, it will happen after ANALYZE
finishes, so we should ignore the effects of the in-progress transaction
--- unless it is our own transaction, and then we should count it.
Let's propagate this definition into VACUUM, too.

Likewise propagate this definition into CREATE INDEX, and into
contrib/pgstattuple's pgstattuple_approx() function.

Tomas Vondra, reviewed by Haribabu Kommi, some corrections by me

Discussion: https://postgr.es/m/16db4468-edfa-830a-f921-39a50498e77e@2ndquadrant.com

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/7c91a0364fcf5d739a09cc87e7adb1d4a33ed112

Modified Files
--------------
contrib/pgstattuple/pgstatapprox.c | 36 +++++++++-------
doc/src/sgml/catalogs.sgml | 4 +-
src/backend/catalog/index.c | 52 +++++++++++++++++------
src/backend/commands/vacuum.c | 6 +++
src/backend/commands/vacuumlazy.c | 86 ++++++++++++++++++++++++++++----------
5 files changed, 132 insertions(+), 52 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Robert Haas 2018-03-22 20:18:00 pgsql: Consider Parallel Append of partial paths for UNION [ALL].
Previous Message Andres Freund 2018-03-22 19:06:51 pgsql: Basic planner and executor integration for JIT.