From 61b22d3aab48fc462bf7283964fde9b3071a72fd Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sun, 23 Feb 2003 23:20:52 +0000 Subject: [PATCH] btree page recycling can be done as soon as page's next-xact label is older than current Xmin; we don't have to wait till it's older than GlobalXmin. --- src/backend/access/nbtree/nbtpage.c | 4 ++-- src/backend/storage/ipc/sinval.c | 9 ++++++--- src/backend/utils/time/tqual.c | 5 +++-- src/include/utils/tqual.h | 3 ++- 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/backend/access/nbtree/nbtpage.c b/src/backend/access/nbtree/nbtpage.c index a9bd393440..c8fb7628ea 100644 --- a/src/backend/access/nbtree/nbtpage.c +++ b/src/backend/access/nbtree/nbtpage.c @@ -9,7 +9,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtpage.c,v 1.62 2003/02/23 22:43:08 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtpage.c,v 1.63 2003/02/23 23:20:52 tgl Exp $ * * NOTES * Postgres btree pages look like ordinary relation pages. The opaque @@ -544,7 +544,7 @@ _bt_page_recyclable(Page page) */ opaque = (BTPageOpaque) PageGetSpecialPointer(page); if (P_ISDELETED(opaque) && - TransactionIdPrecedesOrEquals(opaque->btpo.xact, RecentGlobalXmin)) + TransactionIdPrecedesOrEquals(opaque->btpo.xact, RecentXmin)) return true; return false; } diff --git a/src/backend/storage/ipc/sinval.c b/src/backend/storage/ipc/sinval.c index 239c3bc8d3..fedb438e97 100644 --- a/src/backend/storage/ipc/sinval.c +++ b/src/backend/storage/ipc/sinval.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/storage/ipc/sinval.c,v 1.53 2002/11/21 06:36:08 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/storage/ipc/sinval.c,v 1.54 2003/02/23 23:20:52 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -298,9 +298,10 @@ GetOldestXmin(bool allDbs) * This ensures that the set of transactions seen as "running" by the * current xact will not change after it takes the snapshot. * - * Also, we compute the current global xmin (oldest xmin across all running + * We also compute the current global xmin (oldest xmin across all running * transactions) and save it in RecentGlobalXmin. This is the same - * computation done by GetOldestXmin(TRUE). + * computation done by GetOldestXmin(TRUE). The xmin value is also stored + * into RecentXmin. *---------- */ Snapshot @@ -419,7 +420,9 @@ GetSnapshotData(bool serializable) if (TransactionIdPrecedes(xmin, globalxmin)) globalxmin = xmin; + /* Update globals for use by VACUUM */ RecentGlobalXmin = globalxmin; + RecentXmin = xmin; snapshot->xmin = xmin; snapshot->xmax = xmax; diff --git a/src/backend/utils/time/tqual.c b/src/backend/utils/time/tqual.c index d6a329fa31..f5f0305e91 100644 --- a/src/backend/utils/time/tqual.c +++ b/src/backend/utils/time/tqual.c @@ -16,7 +16,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/time/tqual.c,v 1.61 2002/10/08 17:17:19 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/time/tqual.c,v 1.62 2003/02/23 23:20:52 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -33,7 +33,8 @@ Snapshot SnapshotDirty = &SnapshotDirtyData; Snapshot QuerySnapshot = NULL; Snapshot SerializableSnapshot = NULL; -/* This is updated by GetSnapshotData: */ +/* These are updated by GetSnapshotData: */ +TransactionId RecentXmin = InvalidTransactionId; TransactionId RecentGlobalXmin = InvalidTransactionId; bool ReferentialIntegritySnapshotOverride = false; diff --git a/src/include/utils/tqual.h b/src/include/utils/tqual.h index 3e3b741321..bba4eac14c 100644 --- a/src/include/utils/tqual.h +++ b/src/include/utils/tqual.h @@ -8,7 +8,7 @@ * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $Id: tqual.h,v 1.43 2002/09/04 20:31:46 momjian Exp $ + * $Id: tqual.h,v 1.44 2003/02/23 23:20:52 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -41,6 +41,7 @@ extern DLLIMPORT Snapshot SnapshotDirty; extern DLLIMPORT Snapshot QuerySnapshot; extern DLLIMPORT Snapshot SerializableSnapshot; +extern TransactionId RecentXmin; extern TransactionId RecentGlobalXmin; extern bool ReferentialIntegritySnapshotOverride;