Re: explain analyze rows=%.0f
Andrei Lepikhov <lepihov@gmail.com>
From: Andrei Lepikhov <lepihov@gmail.com>
To: Tom Lane <tgl@sss.pgh.pa.us>, Robert Haas <robertmhaas@gmail.com>
Cc: Ilia Evdokimov <ilya.evdokimov@tantorlabs.com>,
Matheus Alcantara <matheusssilv97@gmail.com>,
Guillaume Lelarge <guillaume@lelarge.info>,
Daniel Gustafsson <daniel@yesql.se>, Ibrar Ahmed <ibrar.ahmad@gmail.com>,
"Gregory Stark (as CFM)" <stark.cfm@gmail.com>,
Amit Kapila <amit.kapila16@gmail.com>, Justin Pryzby <pryzby@telsasoft.com>,
Peter Geoghegan <pg@bowt.ie>, vignesh C <vignesh21@gmail.com>,
"David G. Johnston" <david.g.johnston@gmail.com>,
pgsql-hackers@lists.postgresql.org
Date: 2025-02-12T08:54:33Z
Lists: pgsql-hackers
On 12/2/2025 03:46, Tom Lane wrote: > Robert Haas <robertmhaas@gmail.com> writes: >> On Tue, Feb 11, 2025 at 12:14 PM Andrei Lepikhov <lepihov@gmail.com> wrote: >>> I support the idea in general, but I believe it should be expanded to >>> cover all cases of parameterised plan nodes. Each rescan iteration may >>> produce a different number of tuples, and rounding can obscure important >>> data. > >> I agree strongly with all of this. I believe we should just implement >> what was agreed here: >> https://www.postgresql.org/message-id/21013.1243618236%40sss.pgh.pa.us >> Let's just display 2 fractional digits when nloops>1, else 0, and call it good. > > Note that that formulation has nothing especially to do with > parameterized plan nodes. Any nestloop inner side would end up > getting shown with fractional rowcounts. Maybe that's fine. I partly agree with this approach. Playing around a bit, I couldn't invent a case where we have different numbers of tuples without parameters. But I can imagine it is possible or may be possible in future. So, it is not necessary to tangle fractional output with a parameterised node. I'm unsure about the inner subtree of a JOIN - subplan may refer to the upper query and process a different number of tuples for every evaluation without any JOIN operator. May we agree on a more general formula to print at least two meaningful digits if we have a fractional part? Examples: - actual rows = 2, nloops = 2 -> rows = 1 - actual rows = 9, nloops = 5 -> rows = 1.8 - actual rows = 101, nloops = 100 -> rows = 1.0 - actual rows = 99, nloops = 1000000 -> rows = 0.000099 It may guarantee that an EXPLAIN exposes most of the data passed the node, enough to tangle it with actual timing and tuples at the upper levels of the query. > > I suggest that when thinking about what to change here, > you start by considering how you'd adjust the docs at > https://www.postgresql.org/docs/devel/using-explain.html > to explain the new behavior. If you can't explain it > clearly for users, then maybe it's not such a great idea. Agree -- regards, Andrei Lepikhov
Commits
-
EXPLAIN: Always use two fractional digits for row counts.
- 95dbd827f2ed 18.0 landed
-
Adjust EXPLAIN test case to filter out "Actual Rows" values.
- 44cbba9a7f51 18.0 cited
-
Allow EXPLAIN to indicate fractional rows.
- ddb17e387aa2 18.0 landed
-
Fix pgbench performance issue induced by commit af35fe501.
- fb056564ec5b 18.0 cited