From: Neil Conway Date: Tue, 7 Aug 2007 06:25:14 +0000 (+0000) Subject: Adjust the output of MemoryContextStats() so that the stats for a X-Git-Tag: REL8_3_BETA1~364 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=849ec99753982eafd223bdb1c9d854aaca3e8f2f;p=thirdparty%2Fpostgresql.git Adjust the output of MemoryContextStats() so that the stats for a child memory contexts is indented two spaces to the right of its parent context. This should make it easier to deduce the memory context hierarchy from the output of MemoryContextStats(). --- diff --git a/src/backend/utils/mmgr/aset.c b/src/backend/utils/mmgr/aset.c index 71b6da1e493..f517e05bc9c 100644 --- a/src/backend/utils/mmgr/aset.c +++ b/src/backend/utils/mmgr/aset.c @@ -11,7 +11,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/mmgr/aset.c,v 1.72 2007/04/30 00:12:08 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/utils/mmgr/aset.c,v 1.73 2007/08/07 06:25:14 neilc Exp $ * * NOTE: * This is a new (Feb. 05, 1999) implementation of the allocation set @@ -214,7 +214,7 @@ static void AllocSetReset(MemoryContext context); static void AllocSetDelete(MemoryContext context); static Size AllocSetGetChunkSpace(MemoryContext context, void *pointer); static bool AllocSetIsEmpty(MemoryContext context); -static void AllocSetStats(MemoryContext context); +static void AllocSetStats(MemoryContext context, int level); #ifdef MEMORY_CONTEXT_CHECKING static void AllocSetCheck(MemoryContext context); @@ -1034,7 +1034,7 @@ AllocSetIsEmpty(MemoryContext context) * Displays stats about memory consumption of an allocset. */ static void -AllocSetStats(MemoryContext context) +AllocSetStats(MemoryContext context, int level) { AllocSet set = (AllocSet) context; long nblocks = 0; @@ -1044,6 +1044,7 @@ AllocSetStats(MemoryContext context) AllocBlock block; AllocChunk chunk; int fidx; + int i; for (block = set->blocks; block != NULL; block = block->next) { @@ -1060,6 +1061,10 @@ AllocSetStats(MemoryContext context) freespace += chunk->size + ALLOC_CHUNKHDRSZ; } } + + for (i = 0; i < level; i++) + fprintf(stderr, " "); + fprintf(stderr, "%s: %lu total in %ld blocks; %lu free (%ld chunks); %lu used\n", set->header.name, totalspace, nblocks, freespace, nchunks, diff --git a/src/backend/utils/mmgr/mcxt.c b/src/backend/utils/mmgr/mcxt.c index 88a91c4748c..dfc0245620a 100644 --- a/src/backend/utils/mmgr/mcxt.c +++ b/src/backend/utils/mmgr/mcxt.c @@ -14,7 +14,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/mmgr/mcxt.c,v 1.61 2007/07/25 12:22:52 mha Exp $ + * $PostgreSQL: pgsql/src/backend/utils/mmgr/mcxt.c,v 1.62 2007/08/07 06:25:14 neilc Exp $ * *------------------------------------------------------------------------- */ @@ -49,6 +49,8 @@ MemoryContext CurTransactionContext = NULL; /* This is a transient link to the active portal's memory context: */ MemoryContext PortalContext = NULL; +static void MemoryContextStatsInternal(MemoryContext context, int level); + /***************************************************************************** * EXPORTED ROUTINES * @@ -320,17 +322,22 @@ MemoryContextIsEmpty(MemoryContext context) */ void MemoryContextStats(MemoryContext context) +{ + MemoryContextStatsInternal(context, 0); +} + +static void +MemoryContextStatsInternal(MemoryContext context, int level) { MemoryContext child; AssertArg(MemoryContextIsValid(context)); - (*context->methods->stats) (context); + (*context->methods->stats) (context, level); for (child = context->firstchild; child != NULL; child = child->nextchild) - MemoryContextStats(child); + MemoryContextStatsInternal(child, level + 1); } - /* * MemoryContextCheck * Check all chunks in the named context. diff --git a/src/include/nodes/memnodes.h b/src/include/nodes/memnodes.h index 2bbe9a8ab8a..5f746479e13 100644 --- a/src/include/nodes/memnodes.h +++ b/src/include/nodes/memnodes.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/nodes/memnodes.h,v 1.32 2007/01/05 22:19:55 momjian Exp $ + * $PostgreSQL: pgsql/src/include/nodes/memnodes.h,v 1.33 2007/08/07 06:25:14 neilc Exp $ * *------------------------------------------------------------------------- */ @@ -44,7 +44,7 @@ typedef struct MemoryContextMethods void (*delete) (MemoryContext context); Size (*get_chunk_space) (MemoryContext context, void *pointer); bool (*is_empty) (MemoryContext context); - void (*stats) (MemoryContext context); + void (*stats) (MemoryContext context, int level); #ifdef MEMORY_CONTEXT_CHECKING void (*check) (MemoryContext context); #endif