Re: Removing more vacuumlazy.c special cases, relfrozenxid optimizations
Peter Geoghegan <pg@bowt.ie>
On Sat, Feb 19, 2022 at 7:47 PM Andres Freund <andres@anarazel.de> wrote: > I'm not that sure those are that different... Imagine some corruption leading > to two hot chains ending in the same tid, which our fancy new secure pruning > algorithm might detect. I suppose that's possible, but it doesn't seem all that likely to ever happen, what with the xmin -> xmax cross-tuple matching stuff. > Either way, I'm a bit surprised about the logic to not allow killing redirect > items? What if you have a redirect pointing to an unused item? Again, I simply think it boils down to having to treat HOT chains as a whole unit when killing TIDs. > > Let's assume that we don't want to make VACUUM/pruning just treat > > orphaned heap-only tuples as DEAD, regardless of their true HTSV-wise > > status > > I don't think that'd ever be a good idea. Those tuples are visible to a > seqscan after all. I agree (I don't hate it completely, but it seems mostly bad). This is what leads me to the conclusion that pg_surgery has to be able to do this instead. Surely it's not okay to have something that makes VACUUM always end in error, that cannot even be fixed by pg_surgery. > > -- let's say that we want to err in the direction of doing > > nothing at all with the page. Now we have to have a weird error in > > VACUUM instead (not great, but better than just spinning between > > lazy_scan_prune and heap_prune_page). > > Non DEAD orphaned versions shouldn't cause a problem in lazy_scan_prune(). The > problem here is a DEAD orphaned HOT tuples, and those we should be able to > delete with the new page pruning logic, right? Right. But what good does that really do? The problematic page had a third tuple (at offnum 3) that was LIVE. If we could have done something about the problematic tuple at offnum 2 (which is where we got stuck), then we'd still be left with a very unpleasant choice about what happens to the third tuple. > I think it might be worth getting rid of the need for the retry approach by > reusing the same HTSV status array between heap_prune_page and > lazy_scan_prune. Then the only legitimate reason for seeing a DEAD item in > lazy_scan_prune() would be some form of corruption. And it'd be a pretty > decent performance boost, HTSV ain't cheap. I guess it doesn't actually matter if we leave an aborted DEAD tuple behind, that we could have pruned away, but didn't. The important thing is to be consistent at the level of the page. -- 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