Re: Combine Prune and Freeze records emitted by vacuum

Melanie Plageman <melanieplageman@gmail.com>

From: Melanie Plageman <melanieplageman@gmail.com>
To: Peter Geoghegan <pg@bowt.ie>
Cc: Heikki Linnakangas <hlinnaka@iki.fi>, Pg Hackers <pgsql-hackers@postgresql.org>, Andres Freund <andres@anarazel.de>, Robert Haas <robertmhaas@gmail.com>
Date: 2024-03-20T20:06:13Z
Lists: pgsql-hackers
On Wed, Mar 20, 2024 at 4:04 PM Peter Geoghegan <pg@bowt.ie> wrote:
>
> 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?

Yep, we have a flag to indicate whether or not a cleanup lock is needed.

- Melanie



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