Reset btpo_cycleid to 0 in btree_xlog_vacuum for consistency with
_bt_delitems_vacuum (the corresponding original execution code). This
makes things neater.
There might be some performance benefit to being consistent like this.
When btvacuumpage doesn't call _bt_delitems_vacuum, it can still
proactively reset btpo_cycleid to 0 via a separate hint-like update
mechanism (it does so whenever it sees that it isn't already set to 0).
And so it's possible that being consistent about resetting btpo_cycleid
like this will save work later on, after standby promotion: subsequent
VACUUMs won't need to clear btpo_cycleid using the hint-like update
mechanism as often as they otherwise would.
Author: Peter Geoghegan
Reviewed-By: Andrey Borodin
Discussion: https://postgr.es/m/CAH2-Wz=+LDFxn9NZyEsCo8ifcyKt6+n-VLyygySEHgMz+oynqw@mail.gmail.com
PageIndexMultiDelete(page, (OffsetNumber *) ptr, xlrec->ndeleted);
/*
- * Mark the page as not containing any LP_DEAD items --- see comments
- * in _bt_delitems_vacuum().
+ * Clear the vacuum cycle ID, and mark the page as not containing any
+ * LP_DEAD items
*/
opaque = BTPageGetOpaque(page);
+ opaque->btpo_cycleid = 0;
opaque->btpo_flags &= ~BTP_HAS_GARBAGE;
PageSetLSN(page, lsn);
if (xlrec->ndeleted > 0)
PageIndexMultiDelete(page, (OffsetNumber *) ptr, xlrec->ndeleted);
- /* Mark the page as not containing any LP_DEAD items */
+ /*
+ * Do *not* clear the vacuum cycle ID, but do mark the page as not
+ * containing any LP_DEAD items
+ */
opaque = BTPageGetOpaque(page);
opaque->btpo_flags &= ~BTP_HAS_GARBAGE;