Re: Combine Prune and Freeze records emitted by vacuum

Peter Geoghegan <pg@bowt.ie>

From: Peter Geoghegan <pg@bowt.ie>
To: Heikki Linnakangas <hlinnaka@iki.fi>
Cc: Melanie Plageman <melanieplageman@gmail.com>, Pg Hackers <pgsql-hackers@postgresql.org>, Andres Freund <andres@anarazel.de>, Robert Haas <robertmhaas@gmail.com>
Date: 2024-03-20T20:04:28Z
Lists: pgsql-hackers
On Wed, Mar 20, 2024 at 9:15 AM Heikki Linnakangas <hlinnaka@iki.fi> wrote:
> > I made it its own sub-record (xlhp_conflict_horizon) less to help with
> > alignment (though we can use all the help we can get there) and more to
> > keep it from getting lost. When you look at heapam_xlog.h, you can see
> > what a XLOG_HEAP2_PRUNE record will contain starting with the
> > xl_heap_prune struct and then all the sub-record types.
>
> Ok, now that I look at this, I wonder if we're being overly cautious
> about the WAL size. We probably could just always include the snapshot
> field, and set it to InvalidTransactionId and waste 4 bytes when it's
> not needed. For the sake of simplicity. I don't feel strongly either way
> though, the flag is pretty simple too.

What about the issue of cleanup locks, which aren't needed and aren't
taken with the current heapam VACUUM record type? Will you preserve
that aspect of the existing design?

-- 
Peter Geoghegan



Commits

  1. Combine freezing and pruning steps in VACUUM

  2. Refactor how heap_prune_chain() updates prunable_xid

  3. Introduce 'options' argument to heap_page_prune()

  4. Handle non-chain tuples outside of heap_prune_chain()

  5. Refactor heap_prune_chain()

  6. Minor refactoring in heap_page_prune

  7. Remove obsolete comment about VACUUM retrying pruning

  8. Merge prune, freeze and vacuum WAL record formats

  9. Remove unused PruneState member rel

  10. Reorganize heap_page_prune() function comment