Index: src/backend/storage/freespace/freespace.c =================================================================== RCS file: /cvsroot/pgsql/src/backend/storage/freespace/freespace.c,v retrieving revision 1.39 diff -c -c -r1.39 freespace.c *** src/backend/storage/freespace/freespace.c 14 Mar 2005 20:15:09 -0000 1.39 --- src/backend/storage/freespace/freespace.c 23 Apr 2005 04:03:09 -0000 *************** *** 691,696 **** --- 691,697 ---- int storedPages = 0; int numRels; double sumRequests; + double extraChunks = 0; double needed; LWLockAcquire(FreeSpaceLock, LW_EXCLUSIVE); *************** *** 698,704 **** --- 699,713 ---- for (fsmrel = FreeSpaceMap->firstRel; fsmrel != NULL; fsmrel = fsmrel->nextPhysical) + { storedPages += fsmrel->storedPages; + if (!fsmrel->isIndex) + /* round so a full page doesn't count twice */ + extraChunks += (fsmrel->storedPages-1) / CHUNKPAGES; + else + extraChunks += (fsmrel->storedPages-1) / INDEXCHUNKPAGES; + } + /* Copy other stats before dropping lock */ numRels = FreeSpaceMap->numRels; sumRequests = FreeSpaceMap->sumRequests; *************** *** 708,718 **** needed = (sumRequests + numRels) * CHUNKPAGES; ereport(elevel, ! (errmsg("free space map: %d relations, %d pages stored; %.0f total pages used", ! numRels, storedPages, needed), ! errdetail("FSM size: %d relations + %d pages = %.0f kB shared memory.", ! MaxFSMRelations, MaxFSMPages, ! (double) FreeSpaceShmemSize() / 1024.0))); CheckFreeSpaceMapStatistics(NOTICE, numRels, needed); /* Print to server logs too because is deals with a config variable. */ --- 717,733 ---- needed = (sumRequests + numRels) * CHUNKPAGES; ereport(elevel, ! (errmsg("free space map: %d relations with free space, maximum of %d relations trackable", ! numRels, MaxFSMRelations))); ! ! ereport(elevel, ! (errmsg("%d pages stored, %.0f pages used (with overhead)", ! storedPages, (extraChunks + numRels) * CHUNKPAGES))); ! ! ereport(elevel, ! (errmsg("%.0f pages required to store all freespace, maximum of %d pages allocatable (%.0f kB)", ! needed, MaxFSMPages, ! (double) FreeSpaceShmemSize() / 1024.0))); CheckFreeSpaceMapStatistics(NOTICE, numRels, needed); /* Print to server logs too because is deals with a config variable. */