From 5ce851dcda7c10513b18eb5ea1ed30976f21f174 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Mon, 5 Apr 1999 22:25:11 +0000 Subject: [PATCH] Reduce default file size limit to 1Gb, and move the configuration constant to config.h. --- src/backend/storage/smgr/md.c | 35 ++++++----------------------------- src/include/config.h.in | 17 +++++++++++++++++ 2 files changed, 23 insertions(+), 29 deletions(-) diff --git a/src/backend/storage/smgr/md.c b/src/backend/storage/smgr/md.c index f411ad8a18..8d7e4c864b 100644 --- a/src/backend/storage/smgr/md.c +++ b/src/backend/storage/smgr/md.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/storage/smgr/md.c,v 1.41 1999/02/13 23:18:35 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/storage/smgr/md.c,v 1.42 1999/04/05 22:25:11 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -33,10 +33,11 @@ * The magnetic disk storage manager keeps track of open file descriptors * in its own descriptor pool. This happens for two reasons. First, at * transaction boundaries, we walk the list of descriptors and flush - * anything that we've dirtied in the current transaction. Second, we - * have to support relations of > 4GBytes. In order to do this, we break - * relations up into chunks of < 2GBytes and store one chunk in each of - * several files that represent the relation. + * anything that we've dirtied in the current transaction. Second, we want + * to support relations larger than the OS' file size limit (often 2GBytes). + * In order to do that, we break relations up into chunks of < 2GBytes + * and store one chunk in each of several files that represent the relation. + * See the BLCKSZ and RELSEG_SIZE configuration constants in include/config.h. */ typedef struct _MdfdVec @@ -59,30 +60,6 @@ static MemoryContext MdCxt; #define MDFD_DIRTY (uint16) 0x01 #define MDFD_FREE (uint16) 0x02 -/* - * RELSEG_SIZE appears to be the number of segments that can - * be in a disk file. It was defined as 262144 based on 8k - * blocks, but now that the block size can be changed, this - * has to be calculated at compile time. Otherwise, the file - * size limit would not work out to 2-gig (2147483648). - * - * The number needs to be (2 ** 31) / BLCKSZ, but to be keep - * the math under MAXINT, pre-divide by 256 and use ... - * - * (((2 ** 23) / BLCKSZ) * (2 ** 8)) - * - * 07 Jan 98 darrenk - * - * Now possibly let the OS handle it... - * - * 19 Mar 98 darrenk - * - */ - -#ifndef LET_OS_MANAGE_FILESIZE -#define RELSEG_SIZE ((8388608 / BLCKSZ) * 256) -#endif - /* routines declared here */ static MdfdVec *_mdfd_openseg(Relation reln, int segno, int oflags); static MdfdVec *_mdfd_getseg(Relation reln, int blkno, int oflag); diff --git a/src/include/config.h.in b/src/include/config.h.in index 74476b3ef9..49aac61ebb 100644 --- a/src/include/config.h.in +++ b/src/include/config.h.in @@ -27,6 +27,23 @@ */ #define BLCKSZ 8192 +/* + * RELSEG_SIZE is the maximum number of blocks allowed in one disk file. + * Thus, the maximum size of a single file is RELSEG_SIZE * BLCKSZ; + * relations bigger than that are divided into multiple files. + * + * CAUTION: RELSEG_SIZE * BLCKSZ must be less than your OS' limit on file size. + * This is typically 2Gb or 4Gb in a 32-bit operating system. By default, + * we make the limit one billion bytes to avoid any possible integer-overflow + * problems within the OS. A limit smaller than necessary only means we + * divide a large relation into more chunks than necessary, so it seems best + * to err in the direction of a small limit. + * + * CAUTION: you had best do an initdb if you change either BLCKSZ or + * RELSEG_SIZE. + */ +#define RELSEG_SIZE (1000000000 / BLCKSZ) + /* * The following is set using configure. */