Re: Removing more vacuumlazy.c special cases, relfrozenxid optimizations
Peter Geoghegan <pg@bowt.ie>
Attachments
- v12-0001-Set-relfrozenxid-to-oldest-extant-XID-seen-by-VA.patch (application/octet-stream) patch v12-0001
- v12-0003-vacuumlazy.c-Move-resource-allocation-to-heap_va.patch (application/octet-stream) patch v12-0003
- v12-0002-Generalize-how-VACUUM-skips-all-frozen-pages.patch (application/octet-stream) patch v12-0002
On Thu, Mar 24, 2022 at 2:40 PM Peter Geoghegan <pg@bowt.ie> wrote: > > > This is absolutely mandatory in the aggressive case, because otherwise > > > relfrozenxid advancement might be seen as unsafe. My observation is: > > > Why should we accept the same race in the non-aggressive case? Why not > > > do essentially the same thing in every VACUUM? > > > > Sure, that seems like a good idea. I think I basically agree with the > > goals of the patch. > > Great. Attached is v12. My current goal is to commit all 3 patches before feature freeze. Note that this does not include the more complicated patch including with previous revisions of the patch series (the page-level freezing work that appeared in versions before v11). Changes that appear in this new revision, v12: * Reworking of the commit messages based on feedback from Robert. * General cleanup of the changes to heapam.c from 0001 (the changes to heap_prepare_freeze_tuple and related functions). New and existing code now fits together a bit better. I also added a couple of new documenting assertions, to make the flow a bit easier to understand. * Added new assertions that document OldestXmin/FreezeLimit/relfrozenxid invariants, right at the point we update pg_class within vacuumlazy.c. These assertions would have a decent chance of failing if there were any bugs in the code. * Removed patch that made DISABLE_PAGE_SKIPPING not force aggressive VACUUM, limiting the underlying mechanism to forcing scanning of all pages in lazy_scan_heap (v11 was the first and last revision that included this patch). * Adds a new small patch 0003. This just moves the last piece of resource allocation that still took place at the top of lazy_scan_heap() back into its caller, heap_vacuum_rel(). The work in 0003 probably should have happened as part of the patch that became commit 73f6ec3d -- same idea. It's totally mechanical stuff. With 0002 and 0003, there is hardly any lazy_scan_heap code before the main loop that iterates through blocks in rel_pages (and the code that's still there is obviously related to the loop in a direct and obvious way). This seems like a big overall improvement in maintainability. Didn't see a way to split up 0002, per Robert's suggestion 3 days ago. As I said at the time, it's possible to split it up, but not in a way that highlights the underlying issue (since the issue 0002 fixes was always limited to non-aggressive VACUUMs). The commit message may have to suffice. -- Peter Geoghegan
Commits
-
Have VACUUM warn on relfrozenxid "in the future".
- e83ebfe6d767 15.0 landed
-
vacuumlazy.c: Further consolidate resource allocation.
- c42a6fc41dc2 15.0 landed
-
Generalize how VACUUM skips all-frozen pages.
- f3c15cbe5065 15.0 landed
-
Set relfrozenxid to oldest extant XID seen by VACUUM.
- 0b018fabaaba 15.0 landed
-
Doc: Add relfrozenxid Tip to XID wraparound section.
- 05023a237c05 15.0 landed
-
vacuumlazy.c: document vistest and OldestXmin.
- 73f6ec3d3c8d 15.0 cited
-
Increase hash_mem_multiplier default to 2.0.
- 8f388f6f554b 15.0 cited
-
Consolidate VACUUM xid cutoff logic.
- efa4a9462a07 15.0 landed
-
Add VACUUM instrumentation for scanned pages, relfrozenxid.
- 872770fd6ccf 15.0 landed
-
Simplify lazy_scan_heap's handling of scanned pages.
- 44fa84881fff 15.0 landed
-
Try to stabilize reloptions test, again.
- b700f96cffd9 15.0 cited
-
Unify VACUUM VERBOSE and autovacuum logging.
- 49c9d9fcfa9a 15.0 cited
-
Fix possible HOT corruption when RECENTLY_DEAD changes to DEAD while pruning.
- 18b87b201f73 15.0 cited
-
pg_resetxlog: add option to set oldest xid & use by pg_upgrade
- 74cf7d46a91d 15.0 cited
-
Teach VACUUM to bypass unnecessary index vacuuming.
- 5100010ee4d5 14.0 cited
-
Centralize horizon determination for temp tables, fixing bug due to skew.
- 94bc27b57680 14.0 cited
-
pg_surgery: Try to stabilize regression tests.
- 0811f766fd74 14.0 cited
-
Add "split after new tuple" nbtree optimization.
- f21668f328c8 12.0 cited
-
Fix bugs in vacuum of shared rels, by keeping their relcache entries current.
- a54e1f158779 11.0 cited
-
Avoid useless truncation attempts during VACUUM.
- e842908233bb 9.6.0 cited
-
Only skip pages marked as clean in the visibility map, if the last 32
- bf136cf6e376 8.4.0 cited
-
Fix recently-understood problems with handling of XID freezing, particularly
- 48188e1621bb 8.2.0 cited