aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Haas <rhaas@postgresql.org>2011-07-07 15:05:21 -0400
committerRobert Haas <rhaas@postgresql.org>2011-07-07 15:09:17 -0400
commita392b5247870da806e511ae2aadb0464509f7afe (patch)
tree9e567dc378f17ed69899ad2f8c048d8f5b08cd37
parentec1339ea5cb591da53ad7584ffc29e120f6bf74f (diff)
downloadpostgresql-a392b5247870da806e511ae2aadb0464509f7afe.tar.gz
postgresql-a392b5247870da806e511ae2aadb0464509f7afe.zip
Adjust OLDSERXID_MAX_PAGE based on BLCKSZ.
The value when BLCKSZ = 8192 is unchanged, but with larger-than-normal block sizes we might need to crank things back a bit, as we'll have more entries per page than normal in that case. Kevin Grittner
-rw-r--r--src/backend/storage/lmgr/predicate.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/backend/storage/lmgr/predicate.c b/src/backend/storage/lmgr/predicate.c
index f0c8ee48c34..7f6dcbb6ca6 100644
--- a/src/backend/storage/lmgr/predicate.c
+++ b/src/backend/storage/lmgr/predicate.c
@@ -305,7 +305,13 @@ static SlruCtlData OldSerXidSlruCtlData;
#define OLDSERXID_PAGESIZE BLCKSZ
#define OLDSERXID_ENTRYSIZE sizeof(SerCommitSeqNo)
#define OLDSERXID_ENTRIESPERPAGE (OLDSERXID_PAGESIZE / OLDSERXID_ENTRYSIZE)
-#define OLDSERXID_MAX_PAGE (SLRU_PAGES_PER_SEGMENT * 0x10000 - 1)
+
+/*
+ * Set maximum pages based on the lesser of the number needed to track all
+ * transactions and the maximum that SLRU supports.
+ */
+#define OLDSERXID_MAX_PAGE Min(SLRU_PAGES_PER_SEGMENT * 0x10000 - 1, \
+ (MaxTransactionId + 1) / OLDSERXID_ENTRIESPERPAGE - 1)
#define OldSerXidNextPage(page) (((page) >= OLDSERXID_MAX_PAGE) ? 0 : (page) + 1)