From f01a67fe92eb5046d208cfa11578fe753562d8e0 Mon Sep 17 00:00:00 2001 From: Ashutosh Bapat Date: Wed, 1 Mar 2017 12:12:11 +0530 Subject: [PATCH 2/3] Patch to measure memory used in CurrentMemoryContext in standard_planner(). --- src/backend/optimizer/plan/planner.c | 5 +++++ src/backend/utils/mmgr/mcxt.c | 26 ++++++++++++++++++++++++++ src/include/utils/memutils.h | 6 ++++++ 3 files changed, 37 insertions(+) diff --git a/src/backend/optimizer/plan/planner.c b/src/backend/optimizer/plan/planner.c index b74e887..410750d 100644 --- a/src/backend/optimizer/plan/planner.c +++ b/src/backend/optimizer/plan/planner.c @@ -195,6 +195,9 @@ standard_planner(Query *parse, int cursorOptions, ParamListInfo boundParams) Plan *top_plan; ListCell *lp, *lr; + MemoryContextCounters mem_start; + + MemoryContextFuncStatsStart(CurrentMemoryContext, &mem_start, __FUNCTION__); /* * Set up global state for this planner invocation. This data is needed @@ -425,6 +428,8 @@ standard_planner(Query *parse, int cursorOptions, ParamListInfo boundParams) MemoryContextResetAndDeleteChildren(glob->path_cxt); glob->path_cxt = NULL; + MemoryContextFuncStatsEnd(CurrentMemoryContext, &mem_start, __FUNCTION__); + return result; } diff --git a/src/backend/utils/mmgr/mcxt.c b/src/backend/utils/mmgr/mcxt.c index 6ad0bb4..94b25ac 100644 --- a/src/backend/utils/mmgr/mcxt.c +++ b/src/backend/utils/mmgr/mcxt.c @@ -577,6 +577,32 @@ MemoryContextStatsInternal(MemoryContext context, int level, } } +void +MemoryContextFuncStatsStart(MemoryContext context, + MemoryContextCounters *start_counts, + const char *label) +{ + memset(start_counts, 0, sizeof(*start_counts)); + MemoryContextStatsInternal(context, 0, false, 100, start_counts); +} + +void +MemoryContextFuncStatsEnd(MemoryContext context, + MemoryContextCounters *start_counts, + const char *label) +{ + MemoryContextCounters end_counts; + Size start_used_space = start_counts->totalspace - start_counts->freespace; + Size end_used_space; + + memset(&end_counts, 0, sizeof(end_counts)); + MemoryContextStatsInternal(context, 0, false, 100, &end_counts); + end_used_space = end_counts.totalspace - end_counts.freespace; + + elog(NOTICE, "%s,%s,%zu,%zu,%ld", label, context->name, + start_used_space, end_used_space, end_used_space - start_used_space); +} + /* * MemoryContextCheck * Check all chunks in the named context. diff --git a/src/include/utils/memutils.h b/src/include/utils/memutils.h index 1d1035e..7d605b1 100644 --- a/src/include/utils/memutils.h +++ b/src/include/utils/memutils.h @@ -122,6 +122,12 @@ extern MemoryContext MemoryContextCreate(NodeTag tag, Size size, MemoryContextMethods *methods, MemoryContext parent, const char *name); +extern void MemoryContextFuncStatsStart(MemoryContext context, + MemoryContextCounters *start_counts, + const char *func_label); +extern void MemoryContextFuncStatsEnd(MemoryContext context, + MemoryContextCounters *start_counts, + const char *func_label); /* -- 1.7.9.5