Further adjustments to Hashagg EXPLAIN ANALYZE output

The "Disk Usage" and "HashAgg Batches" properties in the EXPLAIN ANALYZE
output for HashAgg were previously only shown if the number of batches
was greater than 0.  Here we change this so that these properties are
always shown for EXPLAIN ANALYZE formats other than "text".  The idea here
is that since the HashAgg could have spilled to disk if there had been
more data or groups to aggregate, then it's relevant that we're clear in
the EXPLAIN ANALYZE output when no spilling occurred in this particular
execution of the given plan.

For the "text" EXPLAIN format, we still hide these properties when no
spilling occurs.  This EXPLAIN format is designed to be easy for humans
to read.  To maintain the readability we have a higher threshold for which
properties we display for this format.

Discussion: https://postgr.es/m/CAApHDvo_dmNozQQTmN-2jGp1vT%3Ddxx7Q0vd%2BMvD1cGpv2HU%3DSg%40mail.gmail.com
Backpatch-through: 13, where the hashagg spilling code was added.
This commit is contained in:
David Rowley 2020-07-01 12:15:59 +12:00
parent e576f71fbe
commit 40efbf8706
1 changed files with 7 additions and 14 deletions

View File

@ -3070,13 +3070,10 @@ show_hashagg_info(AggState *aggstate, ExplainState *es)
/* EXPLAIN ANALYZE */
ExplainPropertyInteger("Peak Memory Usage", "kB", memPeakKb, es);
if (aggstate->hash_batches_used > 0)
{
ExplainPropertyInteger("Disk Usage", "kB",
aggstate->hash_disk_used, es);
ExplainPropertyInteger("HashAgg Batches", NULL,
aggstate->hash_batches_used, es);
}
ExplainPropertyInteger("Disk Usage", "kB",
aggstate->hash_disk_used, es);
ExplainPropertyInteger("HashAgg Batches", NULL,
aggstate->hash_batches_used, es);
}
else
{
@ -3145,13 +3142,9 @@ show_hashagg_info(AggState *aggstate, ExplainState *es)
{
ExplainPropertyInteger("Peak Memory Usage", "kB", memPeakKb,
es);
if (hash_batches_used > 0)
{
ExplainPropertyInteger("Disk Usage", "kB", hash_disk_used,
es);
ExplainPropertyInteger("HashAgg Batches", NULL,
hash_batches_used, es);
}
ExplainPropertyInteger("Disk Usage", "kB", hash_disk_used, es);
ExplainPropertyInteger("HashAgg Batches", NULL,
hash_batches_used, es);
}
if (es->workers_state)