0002-Patch-to-measure-memory-used-in-CurrentMemoryContext.patch
application/octet-stream
Filename: 0002-Patch-to-measure-memory-used-in-CurrentMemoryContext.patch
Type: application/octet-stream
Part: 1
Patch
Format: format-patch
Series: patch 0002
Subject: Patch to measure memory used in CurrentMemoryContext in standard_planner().
| File | + | − |
|---|---|---|
| src/backend/optimizer/plan/planner.c | 5 | 0 |
| src/backend/utils/mmgr/mcxt.c | 26 | 0 |
| src/include/utils/memutils.h | 6 | 0 |
From 4f5bde7a4902e3cd2ef2a1dd4cfec2d93c695966 Mon Sep 17 00:00:00 2001
From: Ashutosh Bapat <ashutosh.bapat@enterprisedb.com>
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