On Thu, 2 Nov 2023 at 20:32, Tomas Vondra <tomas.vondra@enterprisedb.com> wrote:
> On 11/2/23 20:09, stepan rutz wrote:
> > db1=# explain (analyze, serialize) select * from test;
> > QUERY PLAN
> > ---------------------------------------------------------------------------------------------------
> > Seq Scan on test (cost=0.00..22.00 rows=1200 width=40) (actual
> > time=0.023..0.027 rows=1 loops=1)
> > Planning Time: 0.077 ms
> > Execution Time: 303.281 ms
> > Serialized Bytes: 78888953 Bytes. Mode Text. Bandwidth 248.068 MB/sec
> [...]
> BTW if you really want to print amount of memory, maybe print it in
> kilobytes, like every other place in explain.c?
Isn't node width in bytes, or is it an opaque value not to be
interpreted by users? I've never really investigated that part of
Postgres' explain output...
> Also, explain generally
> prints stuff in "key: value" style (in text format).
That'd be key: metrickey=metricvalue for expanded values like those in
plan nodes and the buffer usage, no?
> > Serialized Bytes: 78888953 Bytes. Mode Text. Bandwidth 248.068 MB/sec
I was thinking more along the lines of something like this:
[...]
Execution Time: xxx ms
Serialization: time=yyy.yyy (in ms) size=yyy (in KiB, or B) mode=text
(or binary)
This is significantly different from your output, as it doesn't hide
the measured time behind a lossy calculation of bandwidth, but gives
the measured data to the user; allowing them to derive their own
precise bandwidth if they're so inclined.
Kind regards,
Matthias van de Meent
Neon (https://neon.tech)