]> granicus.if.org Git - postgresql/commitdiff
btree page recycling can be done as soon as page's next-xact label is
authorTom Lane <tgl@sss.pgh.pa.us>
Sun, 23 Feb 2003 23:20:52 +0000 (23:20 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Sun, 23 Feb 2003 23:20:52 +0000 (23:20 +0000)
older than current Xmin; we don't have to wait till it's older than
GlobalXmin.

src/backend/access/nbtree/nbtpage.c
src/backend/storage/ipc/sinval.c
src/backend/utils/time/tqual.c
src/include/utils/tqual.h

index a9bd393440ca46ef7b347a43fb54e095b4090e92..c8fb7628ead445d0f6c2d55730ad35668af280aa 100644 (file)
@@ -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;
 }
index 239c3bc8d30f26a6eeec1d08ef9016f5366177d2..fedb438e9762e0b7696f5deedafe1beaa88f0469 100644 (file)
@@ -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;
index d6a329fa318c33af71abebe6ba51557e941de860..f5f0305e91ab072c387aa8aa40475c29505f76ec 100644 (file)
@@ -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;
index 3e3b741321a1e40186a655eac2e7cacfcbd6cc14..bba4eac14ced96e410c4cda3f409c104bfc0775c 100644 (file)
@@ -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;