postgres.git / summary / log / commit / refs

commit    1c7ddbf3501e989d6b783dc516c44c3535dbe03f
Author:   Simon Riggs <simon@2ndQuadrant.com>
Date:     Thu Jun 16 09:12:50 2011 +0000
First released in: 9.2.0, 9.0.5, 9.1.0

    Respect Hot Standby controls while recycling btree index pages.
    Btree pages were recycled after VACUUM deletes all records on a
    page and then a subsequent VACUUM occurs after the RecentXmin
    horizon is reached. Using RecentXmin meant that we did not respond
    correctly to the user controls provide to avoid Hot Standby
    conflicts and so spurious conflicts could be generated in some
    workload combinations. We now reuse pages only when we reach
    RecentGlobalXmin, which can be much later in the presence of long
    running queries and is also controlled by vacuum_defer_cleanup_age.
    
    Noah Misch and Simon Riggs


src/backend/access/nbtree/nbtpage.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/backend/access/nbtree/nbtpage.c b/src/backend/access/nbtree/nbtpage.c index 0fb4749c35d..4ecad196d45 100644 --- a/src/backend/access/nbtree/nbtpage.c +++ b/src/backend/access/nbtree/nbtpage.c @@ -677,6 +677,7 @@ bool _bt_page_recyclable(Page page) { BTPageOpaque opaque; + TransactionId cutoff; /* * It's possible to find an all-zeroes page in an index --- for example, a @@ -689,11 +690,18 @@ _bt_page_recyclable(Page page) /* * Otherwise, recycle if deleted and too old to have any processes - * interested in it. + * interested in it. If we are generating records for Hot Standby + * defer page recycling until RecentGlobalXmin to respect user + * controls specified by vacuum_defer_cleanup_age or hot_standby_feedback. */ + if (XLogStandbyInfoActive()) + cutoff = RecentGlobalXmin; + else + cutoff = RecentXmin; + opaque = (BTPageOpaque) PageGetSpecialPointer(page); if (P_ISDELETED(opaque) && - TransactionIdPrecedesOrEquals(opaque->btpo.xact, RecentXmin)) + TransactionIdPrecedesOrEquals(opaque->btpo.xact, cutoff)) return true; return false; } [parent: 669ac03af623]