From 40efbf8706cdd96e06bc4d1754272e46d9857875 Mon Sep 17 00:00:00 2001 From: David Rowley Date: Wed, 1 Jul 2020 12:15:59 +1200 Subject: [PATCH] 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. --- src/backend/commands/explain.c | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/src/backend/commands/explain.c b/src/backend/commands/explain.c index a131d15ac0..093864cfc0 100644 --- a/src/backend/commands/explain.c +++ b/src/backend/commands/explain.c @@ -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)