On Tue, Jun 23, 2020 at 2:57 AM Amit Kapila <amit.kapila16@gmail.com> wrote:
> I don't think this is an odd situation because in this case, child
> nodes like "Nested Loop" and "Parallel Seq Scan" has a value of
> 'loops' as 3. So, to get the correct stats at those nodes, you need
> to divide it by 3 whereas, at Gather node, the value of 'loops' is 1.
> If you want to verify this thing then try with a plan where loops
> should be 1 for child nodes as well, you should get the same value at
> both Gather and Parallel Seq Scan nodes.
Thanks for the response, but I still don't follow. I had assumed that
loops=3 was just from loops=1 for the parallel leader plus loops=1 for
each worker--is that not right? I don't see any other reason for
looping over the NL node itself in this plan. The Gather itself
doesn't do any real looping, right?
But even so, the documentation [1] states:
>In some query plans, it is possible for a subplan node to be executed more than once. For example, the inner index
scanwill be executed once per outer row in the above nested-loop plan. In such cases, the loops value reports the total
numberof executions of the node, and the actual time and rows values shown are averages per-execution. This is done to
makethe numbers comparable with the way that the cost estimates are shown. Multiply by the loops value to get the total
timeactually spent in the node.
So we should be seeing an average, not a sum, right?
[1]: https://www.postgresql.org/docs/current/using-explain.html#USING-EXPLAIN-ANALYZE