postgres.git / summary / log / commit / refs

commit    da9517fb3a0979f8d75823199f7a231e0269963b
Author:   Peter Geoghegan <pg@bowt.ie>
Date:     Mon Dec 23 20:46:00 2024 +0000

    Reset btpo_cycleid in nbtree VACUUM's REDO routine.
    
    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 <pg@bowt.ie>
    Reviewed-By: Andrey Borodin <x4mmm@yandex-team.ru>
    Discussion: https://postgr.es/m/CAH2-Wz=+LDFxn9NZyEsCo8ifcyKt6+n-VLyygySEHgMz+oynqw@mail.gmail.com


src/backend/access/nbtree/nbtxlog.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/backend/access/nbtree/nbtxlog.c b/src/backend/access/nbtree/nbtxlog.c index 7e91584f1ae..901b5f70be3 100644 --- a/src/backend/access/nbtree/nbtxlog.c +++ b/src/backend/access/nbtree/nbtxlog.c @@ -634,10 +634,11 @@ btree_xlog_vacuum(XLogReaderState *record) 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); @@ -698,7 +699,10 @@ btree_xlog_delete(XLogReaderState *record) 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; [parent: c431986de16c]