Re: [POC] Faster processing at Gather node
Andres Freund <andres@anarazel.de>
Hi, On 2017-11-06 10:56:43 +0530, Amit Kapila wrote: > On Sun, Nov 5, 2017 at 6:54 AM, Andres Freund <andres@anarazel.de> wrote > > On 2017-11-05 01:05:59 +0100, Robert Haas wrote: > >> skip-gather-project-v1.patch does what it says on the tin. I still > >> don't have a test case for this, and I didn't find that it helped very > >> much, > > I am also wondering in which case it can help and I can't think of the > case. I'm confused? Isn't it fairly obvious that unnecessarily projecting at the gather node is wasteful? Obviously depending on the query you'll see smaller / bigger gains, but that there's beenfdits should be fairly obvious? > Basically, as part of projection in the gather, I think we are just > deforming the tuple which we anyway need to perform before sending the > tuple to the client (printtup) or probably at the upper level of the > node. But in most cases you're not going to print millions of tuples, instead you're going to apply some further operators ontop (e.g. the OFFSET/LIMIT in my example). > >> and you said this looked like a big bottleneck in your > >> testing, so here you go. > Is it possible that it shows the bottleneck only for 'explain analyze' > statement as we don't deform the tuple for that at a later stage? Doesn't matter, there's a OFFSET/LIMIT ontop of the query. Could just as well be a sort node or something. > > The query where that showed a big benefit was > > > > SELECT * FROM lineitem WHERE l_suppkey > '5012' OFFSET 1000000000 LIMIT 1; > > > > (i.e a not very selective filter, and then just throwing the results away) > > > > still shows quite massive benefits: > > Do you see the benefit if the query is executed without using Explain Analyze? Yes. Before: tpch_5[11878][1]=# SELECT * FROM lineitem WHERE l_suppkey > '5012' OFFSET 1000000000 LIMIT 1;^[[A ... Time: 7590.196 ms (00:07.590) After: Time: 3862.955 ms (00:03.863) Greetings, Andres Freund
Commits
-
C comment: fix wording about shared memory message queue
- bc0021ef09ec 11.0 landed
-
shm_mq: Have the receiver set the sender's less frequently.
- 497171d3e2aa 11.0 landed
-
shm_mq: Reduce spinlock usage.
- 34db06ef9a1d 11.0 landed
-
Remove use of byte-masking macros in record_image_cmp
- 0b5e33f667a2 11.0 cited
-
Remove memory leak protection from Gather and Gather Merge nodes.
- 9f4992e2a993 11.0 landed
-
Avoid projecting tuples unnecessarily in Gather and Gather Merge.
- b10967eddf96 11.0 landed
-
Tweak use of ExecContextForcesOids by Gather (Merge).
- 0510421ee091 11.0 landed
-
Pass eflags down to parallel workers.
- f455e1125e25 11.0 landed
-
Disable installcheck tests for test_session_hooks
- 745948422c79 11.0 cited
-
First-draft release notes for 10.1.
- 42de8a0255c2 11.0 cited
-
Remove TupleDesc remapping logic from tqueue.c.
- 6b65a7fe62e1 11.0 cited
-
Avoid memory leaks when a GatherMerge node is rescanned.
- 2d44c58c79ae 11.0 cited
-
Code review for nodeGatherMerge.c.
- 04e9678614ec 11.0 cited
-
Add a Gather Merge executor node.
- 355d3993c53e 10.0 cited
-
Push scan/join target list beneath Gather when possible.
- 992b5ba30dca 9.6.0 cited