Re: VACUUM and ANALYZE disagreeing on what reltuples means
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Haribabu Kommi <kommi.haribabu@gmail.com>
Cc: Tomas Vondra <tomas.vondra@2ndquadrant.com>,
"pgsql-hackers@postgresql.org" <pgsql-hackers@postgresql.org>
Date: 2017-11-02T19:15:25Z
Lists: pgsql-hackers
Attachments
- vacuum-reltuples-fix-v3.patch (text/x-diff) patch v3
Haribabu Kommi <kommi.haribabu@gmail.com> writes: > The changes are fine and now it reports proper live tuples in both > pg_class and stats. The other issue of continuous vacuum operation > leading to decrease of number of live tuples is not related to this > patch and that can be handled separately. I did not like this patch too much, because it did nothing to fix the underlying problem of confusion between "live tuples" and "total tuples"; in fact, it made that worse, because now the comment on LVRelStats.new_rel_tuples is a lie. And there's at least one usage of that field value where I think we do want total tuples not live tuples: where we pass it to index AM cleanup functions. Indexes don't really care whether heap entries are live or not, only that they're there. Plus the VACUUM VERBOSE log message that uses the field is supposed to be reporting total tuples not live tuples. I hacked up the patch trying to make that better, finding along the way that contrib/pgstattuple shared in the confusion about what it was trying to count. Results attached. However, I'm not sure we're there yet, because there remains a fairly nasty discrepancy even once we've gotten everyone onto the same page about reltuples counting just live tuples: VACUUM and ANALYZE have different definitions of what's "live". In particular they do not treat INSERT_IN_PROGRESS and DELETE_IN_PROGRESS tuples the same. Should we try to do something about that? If so, what? It looks like ANALYZE's behavior is pretty tightly constrained, judging by the comments in acquire_sample_rows. Another problem is that it looks like CREATE INDEX will set reltuples to the total number of heap entries it chose to index, because that is what IndexBuildHeapScan counts. Maybe we should adjust that? regards, tom lane
Commits
-
Sync up our various ways of estimating pg_class.reltuples.
- 7c91a0364fcf 11.0 landed
-
Fix tuple counting in SP-GiST index build.
- 649f1792508f 11.0 landed
- eee190da7eeb 9.5.13 landed
- db35bf507ffd 9.6.9 landed
- bf14575c840f 10.4 landed
- 7f6f8ccd976d 9.4.18 landed
- 46f80803a127 9.3.23 landed
-
Fix errors in contrib/bloom index build.
- c35b47286960 11.0 landed
- df90401556ce 9.6.9 landed
- 76e2b5ae4151 10.4 landed
-
When updating reltuples after ANALYZE, just extrapolate from our sample.
- d44ce7b1afdb 9.3.23 landed
- d04900de7d0c 11.0 landed
- c9414e7867f7 9.5.13 landed
- c2c4bc628bbe 9.6.9 landed
- 25a2ba35edbc 9.4.18 landed
- 1bfb5672306d 10.4 landed
-
Avoid holding AutovacuumScheduleLock while rechecking table statistics.
- 5328b6135756 9.3.23 landed
- 95f08d32dec4 9.4.18 landed
- 231329a17564 9.5.13 landed
- 4b0e717053e3 9.6.9 landed
- 4460964aedaa 10.4 landed
- 38f7831d703b 11.0 landed