Re: relfrozenxid may disagree with row XIDs after 1ccc1e05ae
Noah Misch <noah@leadboat.com>
Commits
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Ensure vacuum removes all visibly dead tuples older than OldestXmin
- 06bf404cd07b 16.4 landed
- 45ce054c02b8 14.13 landed
- dc6354c67017 15.8 landed
-
Combine freezing and pruning steps in VACUUM
- 6dbb490261a6 17.0 cited
-
Handle non-chain tuples outside of heap_prune_chain()
- 6f47f6883151 17.0 cited
-
Fix false reports in pg_visibility
- e85662df44ff 17.0 cited
-
Remove retry loop in heap_page_prune().
- 1ccc1e05ae8f 17.0 cited
-
vacuumlazy.c: document vistest and OldestXmin.
- 73f6ec3d3c8d 15.0 cited
-
Deduplicate choice of horizon for a relation procarray.c.
- d9d8aa9bb9aa 15.0 cited
-
Remove tupgone special case from vacuumlazy.c.
- 8523492d4e34 14.0 cited
-
Simplify state managed by VACUUM.
- b4af70cb2103 14.0 cited
-
Recycle nbtree pages deleted during same VACUUM.
- 9dd963ae2534 14.0 cited
-
snapshot scalability: Don't compute global horizons while building snapshots.
- dc7420c2c927 14.0 cited
-
Raise error when affecting tuple moved into different partition.
- f16241bef7cc 11.0 cited
On Thu, May 16, 2024 at 07:57:27PM -0400, Melanie Plageman wrote: > On Thu, May 9, 2024 at 5:56 PM Melanie Plageman <melanieplageman@gmail.com> wrote: > > I can repro the hang on 14 and 15 with the following: > I'll probably add more robust comments to the test next week in > preparation for writing a detailed commit message for the fix > explaining the scenario. Are there obstacles to fixing the hang by back-patching 1ccc1e05ae instead of this? We'll need to get confident about 1ccc1e05ae before v17, and that sounds potentially easier than getting confident about both 1ccc1e05ae and this other approach. Regarding getting confident about 1ccc1e05ae, I think I follow the upthread arguments that it does operate correctly. As a cross check, I looked at each mention of oldestxmin in vacuumlazy.c and vacuum.c. Does the following heap_vacuum_rel() comment need an update? /* * Get cutoffs that determine which deleted tuples are considered DEAD, * not just RECENTLY_DEAD, and which XIDs/MXIDs to freeze. Then determine * the extent of the blocks that we'll scan in lazy_scan_heap. It has to * happen in this order to ensure that the OldestXmin cutoff field works * as an upper bound on the XIDs stored in the pages we'll actually scan * (NewRelfrozenXid tracking must never be allowed to miss unfrozen XIDs). * * Next acquire vistest, a related cutoff that's used in pruning. We * expect vistest will always make heap_page_prune_and_freeze() remove any * deleted tuple whose xmax is < OldestXmin.