Updated FSM display for VACUUM VERBOSE - Mailing list pgsql-patches
| From | Bruce Momjian |
|---|---|
| Subject | Updated FSM display for VACUUM VERBOSE |
| Date | |
| Msg-id | 200504230423.j3N4Ner13480@candle.pha.pa.us Whole thread Raw |
| List | pgsql-patches |
I have trouble understanding the current output of VACUUM VERBOSE when
it displays FSM information.
The current output is:
INFO: free space map: 49 relations, 17266 pages stored; 18768 total
pages used
DETAIL: FSM size: 1000 relations + 18000 pages = 171 kB shared memory.
NOTICE: the number of page slots needed (18768) exceeds max_fsm_pages
(18000)
HINT: Consider increasing the configuration parameter "max_fsm_relations"
to a value over 18768.
The problem I have is that the relations part is mixed with the pages
part, and the numbers aren't easily comparable. I have attached a patch
which makes the information easier to understand. Here is one where the
FSM is large enough:
INFO: free space map: 48 relations with free space, maximum of 1000 relations trackable
INFO: 35 pages stored, 768 pages used (with overhead)
INFO: 768 pages required to store all freespace, maximum of 18000 pages allocatable (171 kB)
and one that is too small:
INFO: free space map: 49 relations with free space, maximum of 1000 relations trackable
INFO: 17266 pages stored, 18000 pages used (with overhead)
INFO: 18768 pages required to store all freespace, maximum of 18000 pages allocatable (171 kB)
NOTICE: the number of page slots needed (18768) exceeds max_fsm_pages (18000)
HINT: Consider increasing the configuration parameter "max_fsm_relations"
to a value over 18768.
I find this output cleaner and easier to understand. The "pages used"
value will match either the "required" or "maximum" value on the line
below.
--
Bruce Momjian | http://candle.pha.pa.us
pgman@candle.pha.pa.us | (610) 359-1001
+ If your life is a hard drive, | 13 Roberts Road
+ Christ can be your backup. | Newtown Square, Pennsylvania 19073
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. */
pgsql-patches by date: