aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backend/commands/explain.c35
-rw-r--r--src/backend/executor/nodeAgg.c3
2 files changed, 20 insertions, 18 deletions
diff --git a/src/backend/commands/explain.c b/src/backend/commands/explain.c
index a283e4d45c8..54e3797a15b 100644
--- a/src/backend/commands/explain.c
+++ b/src/backend/commands/explain.c
@@ -3059,21 +3059,19 @@ show_hashagg_info(AggState *aggstate, ExplainState *es)
if (es->format != EXPLAIN_FORMAT_TEXT)
{
- if (es->costs && aggstate->hash_planned_partitions > 0)
- {
+ if (es->costs)
ExplainPropertyInteger("Planned Partitions", NULL,
aggstate->hash_planned_partitions, es);
- }
if (!es->analyze)
return;
/* EXPLAIN ANALYZE */
+ ExplainPropertyInteger("HashAgg Batches", NULL,
+ aggstate->hash_batches_used, es);
ExplainPropertyInteger("Peak Memory Usage", "kB", memPeakKb, es);
ExplainPropertyInteger("Disk Usage", "kB",
aggstate->hash_disk_used, es);
- ExplainPropertyInteger("HashAgg Batches", NULL,
- aggstate->hash_batches_used, es);
}
else
{
@@ -3099,13 +3097,13 @@ show_hashagg_info(AggState *aggstate, ExplainState *es)
else
appendStringInfoString(es->str, " ");
- appendStringInfo(es->str, "Peak Memory Usage: " INT64_FORMAT "kB",
- memPeakKb);
+ appendStringInfo(es->str, "Batches: %d Memory Usage: " INT64_FORMAT "kB",
+ aggstate->hash_batches_used, memPeakKb);
- if (aggstate->hash_batches_used > 0)
- appendStringInfo(es->str, " Disk Usage: " UINT64_FORMAT "kB HashAgg Batches: %d",
- aggstate->hash_disk_used,
- aggstate->hash_batches_used);
+ /* Only display disk usage if we spilled to disk */
+ if (aggstate->hash_batches_used > 1)
+ appendStringInfo(es->str, " Disk Usage: " UINT64_FORMAT "kB",
+ aggstate->hash_disk_used);
appendStringInfoChar(es->str, '\n');
}
@@ -3130,21 +3128,22 @@ show_hashagg_info(AggState *aggstate, ExplainState *es)
{
ExplainIndentText(es);
- appendStringInfo(es->str, "Peak Memory Usage: " INT64_FORMAT "kB",
- memPeakKb);
+ appendStringInfo(es->str, "Batches: %d Memory Usage: " INT64_FORMAT "kB",
+ hash_batches_used, memPeakKb);
- if (hash_batches_used > 0)
- appendStringInfo(es->str, " Disk Usage: " UINT64_FORMAT "kB HashAgg Batches: %d",
- hash_disk_used, hash_batches_used);
+ /* Only display disk usage if we spilled to disk */
+ if (hash_batches_used > 1)
+ appendStringInfo(es->str, " Disk Usage: " UINT64_FORMAT "kB",
+ hash_disk_used);
appendStringInfoChar(es->str, '\n');
}
else
{
+ ExplainPropertyInteger("HashAgg Batches", NULL,
+ hash_batches_used, es);
ExplainPropertyInteger("Peak Memory Usage", "kB", memPeakKb,
es);
ExplainPropertyInteger("Disk Usage", "kB", hash_disk_used, es);
- ExplainPropertyInteger("HashAgg Batches", NULL,
- hash_batches_used, es);
}
if (es->workers_state)
diff --git a/src/backend/executor/nodeAgg.c b/src/backend/executor/nodeAgg.c
index ea928d5cb7c..5ca1751f956 100644
--- a/src/backend/executor/nodeAgg.c
+++ b/src/backend/executor/nodeAgg.c
@@ -3641,6 +3641,9 @@ ExecInitAgg(Agg *node, EState *estate, int eflags)
find_hash_columns(aggstate);
build_hash_tables(aggstate);
aggstate->table_filled = false;
+
+ /* Initialize this to 1, meaning nothing spilled, yet */
+ aggstate->hash_batches_used = 1;
}
/*