Re: explain analyze rows=%.0f
Alena Rybakina <a.rybakina@postgrespro.ru>
From: Alena Rybakina <a.rybakina@postgrespro.ru>
To: Ilia Evdokimov <ilya.evdokimov@tantorlabs.com>
Cc: Robert Haas <robertmhaas@gmail.com>, Andrei Lepikhov <lepihov@gmail.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>, Tom Lane
<tgl@sss.pgh.pa.us>, 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-11T19:43:30Z
Lists: pgsql-hackers
Hi! Thank you for your valuable work on this! On 11.02.2025 22:18, Ilia Evdokimov wrote: > > On 11.02.2025 20:41, Robert Haas wrote: >> 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. >>> >>> For example, consider five loops of a scan node: the first loop returns >>> nine tuples, and each other - zero tuples. When we calculate the >>> average, 9 divided by 5 equals 1.8. This results in an explanation that >>> indicates "rows = 1," masking almost 40% of the data. >>> >>> Now, if we apply the same two loops but have a total of 900,000 tuples, >>> then 400,000 masked tuples represent a significant portion of the data. >>> >>> Moreover, switching to a floating-point type for row explanations in >>> each parameterised node would provide a more comprehensive view and add >>> valuable information about the parameterisation of the node, which may >>> not be immediately apparent. >> 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. >> > > Thank you for your review! > > With such example, it's hard to disagree with it. This would really > add valuable information. Taking all opinions into account, I have > updated the patch v8. I have also included a check for the case where > there are only zeros after the decimal point. We do not want to > clutter the rows with unnecessary zeros. > I looked at the patch and agree with them. I would suggest adding a description of how this can help in analyzing the query plans - I think there is a lack of a description of the reason why this is done in the commit message. I would also add the same to the documentation with an example. -- Regards, Alena Rybakina Postgres Professional
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