Re: Explain buffers wrong counter with parallel plans
Andres Freund <andres@anarazel.de>
From: Andres Freund <andres@anarazel.de>
To: Amit Kapila <amit.kapila16@gmail.com>, Robert Haas <robertmhaas@gmail.com>
Cc: Adrien Nayrat <adrien.nayrat@anayrat.info>, PostgreSQL mailing lists <pgsql-hackers@postgresql.org>
Date: 2018-05-01T20:57:08Z
Lists: pgsql-hackers
Hi, On 2018-04-29 20:40:43 +0530, Amit Kapila wrote: > On Wed, Mar 28, 2018 at 12:07 AM, Adrien Nayrat > > QUERY PLAN > > > > ---------------------------------------------------------------------------------------------------------------------------- > > Aggregate (cost=1692478.00..1692478.01 rows=1 width=8) (actual > > time=34367.678..34367.678 rows=1 loops=1) > > Buffers: shared read=442478 > > I/O Timings: read=7977.775 > > -> Seq Scan on t1 (cost=0.00..1442478.00 rows=100000000 width=0) (actual > > time=8.672..19685.654 rows=100000000 loops=1) > > Buffers: shared read=442478 > > I/O Timings: read=7977.775 > > Planning time: 38.971 ms > now> Execution time: 34368.097 ms > > (8 rows) > > > > > > > > Gather and Finalize Aggregate should report shared read=442478. > > > > Yeah, it would have been convenient, if Gather and Finalize Aggregate > displays that way as it would have been easier for users to > understand. However, as of now, the aggregated stats for parallel > workers and leader are displayed at parallel/partial nodes as is > displayed in the plan. So according to me, what you are seeing is > okay, it is only slightly tricky to understand it. > > > I am also surprised for I/O Timings in parallel node: > > I/O Timings: read=60706.314 but the query last 34s? > > > > This is the aggregated time of all the parallel workers, so you need > to divide it by loops (which in your case is 3). > > > I played with git bisect and I found this commit : > > > > commit 01edb5c7fc3bcf6aea15f2b3be36189b52ad9d1a > > Author: Tom Lane <tgl@sss.pgh.pa.us> > > Date: Fri Sep 1 17:38:54 2017 -0400 > > > > I think you were seeing different results before this commit because > before that we were shutting down workers as soon as parallel workers > are done and the buffer_usage stats were accumulated and were being > used for upper nodes. According to me behavior after the commit is > consistent, for example, I think if you check the case of GatherMerge > before this commit, you will still get the stats in the way it is > after commit. Robert, you added this as an open item. I don't think it's clear that there's a bug here, and even less clear that it's something new for v11. Am I understanding that right? Should we close this open item? Greetings, Andres Freund
Commits
-
Adjust comment atop ExecShutdownNode.
- 32b16d497a93 10.6 landed
- f34d4b79fab4 11.0 landed
- 4f9a97e417ca 12.0 landed
-
Prohibit shutting down resources if there is a possibility of back up.
- 69de17186ad9 9.6.11 landed
- ba10eaef509b 10.6 landed
- c054afd0a22c 11.0 landed
- 2cd0acfdade8 12.0 landed
-
Fix buffer usage stats for parallel nodes.
- 19df1702f5c5 9.6.10 landed
- b805b63ac277 10.5 landed
- dac7fe13bbf1 11.0 landed
- 85c9d3475e4f 12.0 landed
-
Match the buffer usage tracking for leader and worker backends.
- 7124c93fb54f 9.6.10 landed
- ef305bd59d98 11.0 landed
- ccc84a956b00 12.0 landed
-
Improve division of labor between execParallel.c and nodeGather[Merge].c.
- 01edb5c7fc3b 10.0 cited