Re: Emit fewer vacuum records by reaping removable tuples during pruning
Melanie Plageman <melanieplageman@gmail.com>
From: Melanie Plageman <melanieplageman@gmail.com>
To: Robert Haas <robertmhaas@gmail.com>
Cc: Michael Paquier <michael@paquier.xyz>, Peter Geoghegan <pg@bowt.ie>, Pg Hackers <pgsql-hackers@postgresql.org>, Andres Freund <andres@anarazel.de>
Date: 2024-01-09T19:23:24Z
Lists: pgsql-hackers
On Tue, Jan 9, 2024 at 1:31 PM Robert Haas <robertmhaas@gmail.com> wrote: > > On Tue, Jan 9, 2024 at 10:56 AM Melanie Plageman > <melanieplageman@gmail.com> wrote: > > Andres had actually said that he didn't like pushing the update of > > nonempty_pages into lazy_scan_[no]prune(). So, my v4 patch set > > eliminates this. > > Mmph - but I was so looking forward to killing hastup! > > > Ultimately I can see arguments for and against. Is it better to avoid > > having the same few lines of code in two places or avoid unneeded > > communication between page-level functions and lazy_scan_heap()? > > To me, the conceptual complexity of an extra structure member is a > bigger cost than duplicating TWO lines of code. If we were talking > about 20 lines of code, I'd say rename it to something less dumb. Yes, I agree. I thought about it more, and I prefer updating the FSM and setting nonempty_pages into lazy_scan_[no]prune(). Originally, I had ordered the patch set with that first (before the patch to do immediate reaping), but there is no reason for it to be so. Using hastup can be done in a subsequent commit on top of the immediate reaping patch. I will post a new version of the immediate reaping patch which addresses your feedback. Then, separately, I will post a revised version of the lazy_scan_heap() refactoring patches. - Melanie
Commits
-
Combine FSM updates for prune and no-prune cases.
- 5eafacd2797d 17.0 landed
-
Remove LVPagePruneState.
- e313a6113704 17.0 landed
-
Move VM update code from lazy_scan_heap() to lazy_scan_prune().
- cb970240f13d 17.0 landed
-
Optimize vacuuming of relations with no indexes.
- c120550edb86 17.0 landed
-
Be more consistent about whether to update the FSM while vacuuming.
- 45d395cd75ff 17.0 landed
-
Remove hastup from LVPagePruneState.
- e2d5b3b9b643 17.0 landed
-
Use scanned_pages to decide when to failsafe check.
- 07eef53955ea 16.0 cited
-
Simplify lazy_scan_heap's handling of scanned pages.
- 44fa84881fff 15.0 cited
-
While vacuuming a large table, update upper-level FSM data every so often.
- 851a26e26637 11.0 cited