Re: Explain buffers wrong counter with parallel plans
Jonathan Katz <jonathan.katz@excoventures.com>
From: "Jonathan S. Katz" <jonathan.katz@excoventures.com>
To: Amit Kapila <amit.kapila16@gmail.com>
Cc: Robert Haas <robertmhaas@gmail.com>,
Alvaro Herrera <alvherre@2ndquadrant.com>,
Adrien Nayrat <adrien.nayrat@anayrat.info>,
Andres Freund <andres@anarazel.de>,
PostgreSQL mailing lists <pgsql-hackers@postgresql.org>
Date: 2018-07-26T14:01:38Z
Lists: pgsql-hackers
> On Jul 25, 2018, at 10:25 PM, Amit Kapila <amit.kapila16@gmail.com> wrote: > > On Wed, Jul 25, 2018 at 7:42 PM, Jonathan S. Katz > <jonathan.katz@excoventures.com> wrote: >> >> On Jul 7, 2018, at 12:03 AM, Amit Kapila <amit.kapila16@gmail.com> wrote: >> >> I tried running the below on both 11beta2 and HEAD with the patch >> applied: >> >> CREATE UNLOGGED TABLE t1 (c1 int); >> INSERT INTO t1 SELECT generate_series(1,100000000); >> /** restart PostgreSQL */ >> EXPLAIN (analyze,buffers,timing off,costs off) >> SELECT count(*) FROM t1; >> /** repeat above two queries */ >> >> I have identical postgresql.conf files on both instances as well. >> >> 11beta2 >> ====== >> buffers=# explain (analyze,buffers,timing off,costs off) select count(*) >> from t1; >> QUERY PLAN >> >> -------------------------------------------------------------------------- >> Finalize Aggregate (actual rows=1 loops=1) >> Buffers: shared read=63175 >> -> Gather (actual rows=7 loops=1) >> Workers Planned: 6 >> Workers Launched: 6 >> Buffers: shared read=63175 >> -> Partial Aggregate (actual rows=1 loops=7) >> Buffers: shared read=442478 >> -> Parallel Seq Scan on t1 (actual rows=14285714 >> loops=7) >> Buffers: shared read=442478 >> Planning Time: 1.422 ms >> Execution Time: 3214.407 ms >> (12 rows) >> >> buffers=# explain (analyze,buffers,timing off,costs off) select count(*) >> from t1; >> QUERY PLAN >> >> -------------------------------------------------------------------------- >> Finalize Aggregate (actual rows=1 loops=1) >> Buffers: shared hit=27 read=64960 >> -> Gather (actual rows=7 loops=1) >> Workers Planned: 6 >> Workers Launched: 6 >> Buffers: shared hit=27 read=64960 >> -> Partial Aggregate (actual rows=1 loops=7) >> Buffers: shared hit=224 read=442254 >> -> Parallel Seq Scan on t1 (actual rows=14285714 >> loops=7) >> Buffers: shared hit=224 read=442254 >> Planning Time: 0.080 ms >> Execution Time: 3774.091 ms >> (12 rows) >> >> HEAD >> ===== >> buffers=# explain (analyze,buffers,timing off,costs off) select count(*) >> from t1; >> QUERY PLAN >> >> -------------------------------------------------------------------------- >> Finalize Aggregate (actual rows=1 loops=1) >> Buffers: shared read=442478 >> -> Gather (actual rows=7 loops=1) >> Workers Planned: 6 >> Workers Launched: 6 >> Buffers: shared read=442478 >> -> Partial Aggregate (actual rows=1 loops=7) >> Buffers: shared read=442478 >> -> Parallel Seq Scan on t1 (actual rows=14285714 >> loops=7) >> Buffers: shared read=442478 >> Planning Time: 1.594 ms >> Execution Time: 6207.799 ms >> (12 rows) >> >> buffers=# explain (analyze,buffers,timing off,costs off) select count(*) >> from t1; >> QUERY PLAN >> >> -------------------------------------------------------------------------- >> Finalize Aggregate (actual rows=1 loops=1) >> Buffers: shared hit=224 read=442254 >> -> Gather (actual rows=7 loops=1) >> Workers Planned: 6 >> Workers Launched: 6 >> Buffers: shared hit=224 read=442254 >> -> Partial Aggregate (actual rows=1 loops=7) >> Buffers: shared hit=224 read=442254 >> -> Parallel Seq Scan on t1 (actual rows=14285714 >> loops=7) >> Buffers: shared hit=224 read=442254 >> Planning Time: 0.074 ms >> Execution Time: 5006.395 ms >> (12 rows) >> >> Notice the “read” numbers just before the “Finalize Aggregate” is much >> higher, >> > > You mean to say the number (Buffers: shared read=442478) in HEAD, > right? If so, yeah, I am also wondering why the results of the patch > are different in HEAD and 11beta2. So, if I read correctly, the > numbers in 11beta2 appears correct, but on HEAD it is not correct, it > should have divided the buffers read by loops. I will figure that > out, but this is just to clarify that both of us are seeing the > results in the same way. I’ll try it again but patch it against 11beta2 and see what results I get. > >> and there appears to be a performance hit. >> > > Do you mean to say the performance of the same query in 11beta2 and > HEAD or something else? Correct. But per your advice let me try running it against a patched version of 11beta2 and see what happens. Jonathan
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