On Tue, Aug 18, 2020 at 10:27:06PM -0500, Justin Pryzby wrote: > On Fri, Aug 07, 2020 at 02:30:01PM +0200, Pierre Giraud wrote: > > Hi all, > > > > As far as I understand, in the upcoming version 13, information about > > buffers used during planning is now available in the explain plan. > > > > […] > > Planning Time: 0.203 ms > > Buffers: shared hit=14 > > […] > > > > For a matter of consistency, I wonder if it would be possible to format > > it like the following: > > > > […] > > Planning: > > Planning Time: 0.203 ms > > Buffers: shared hit=14 > > Thanks for reporting. I added this here. > https://wiki.postgresql.org/wiki/PostgreSQL_13_Open_Items
Thanks Justin! Hearing no objection, here's a patch to change the output as suggested by Pierre: =# explain (analyze, buffers) select * from pg_class; QUERY PLAN > -------------------------------------------------------------------------------------------------------> Seq Scan on pg_class (cost=0.00..16.86 rows=386 width=265) (actual time=0.020..0.561 rows=386 loops=1) Buffers: shared hit=9 read=4 Planning: Planning Time: 4.345 ms Buffers: shared hit=103 read=12 Execution Time: 1.447 ms (6 rows) =# explain (analyze, buffers, format json) select * from pg_class; QUERY PLAN ------------------------------------- [ + { + "Plan": { + "Node Type": "Seq Scan", + "Parallel Aware": false, + [...] "Temp Written Blocks": 0 + }, + "Planning": { + "Planning Time": 4.494, + "Shared Hit Blocks": 103, + "Shared Read Blocks": 12, + "Shared Dirtied Blocks": 0, + "Shared Written Blocks": 0, + "Local Hit Blocks": 0, + "Local Read Blocks": 0, + "Local Dirtied Blocks": 0, + "Local Written Blocks": 0, + "Temp Read Blocks": 0, + "Temp Written Blocks": 0 + }, + "Triggers": [ + ], + "Execution Time": 1.824 + } + ] (1 row)
diff --git a/src/backend/commands/explain.c b/src/backend/commands/explain.c index 30e0a7ee7f..375431acee 100644 --- a/src/backend/commands/explain.c +++ b/src/backend/commands/explain.c @@ -587,7 +587,15 @@ ExplainOnePlan(PlannedStmt *plannedstmt, IntoClause *into, ExplainState *es, ExplainPrintPlan(es, queryDesc); if (es->summary && (planduration || bufusage)) + { ExplainOpenGroup("Planning", "Planning", true, es); + if (es->format == EXPLAIN_FORMAT_TEXT) + { + ExplainIndentText(es); + appendStringInfoString(es->str, "Planning:\n"); + es->indent++; + } + } if (es->summary && planduration) { @@ -598,16 +606,14 @@ ExplainOnePlan(PlannedStmt *plannedstmt, IntoClause *into, ExplainState *es, /* Show buffer usage */ if (es->summary && bufusage) - { - if (es->format == EXPLAIN_FORMAT_TEXT) - es->indent++; show_buffer_usage(es, bufusage); - if (es->format == EXPLAIN_FORMAT_TEXT) - es->indent--; - } if (es->summary && (planduration || bufusage)) + { + if (es->format == EXPLAIN_FORMAT_TEXT) + es->indent--; ExplainCloseGroup("Planning", "Planning", true, es); + } /* Print info about runtime of triggers */ if (es->analyze)