Skip to content
Snippets Groups Projects
Select Git revision
  • benchmark-tools
  • postgres-lambda
  • master default
  • REL9_4_25
  • REL9_5_20
  • REL9_6_16
  • REL_10_11
  • REL_11_6
  • REL_12_1
  • REL_12_0
  • REL_12_RC1
  • REL_12_BETA4
  • REL9_4_24
  • REL9_5_19
  • REL9_6_15
  • REL_10_10
  • REL_11_5
  • REL_12_BETA3
  • REL9_4_23
  • REL9_5_18
  • REL9_6_14
  • REL_10_9
  • REL_11_4
23 results

execParallel.c

Blame
    • Robert Haas's avatar
      45be99f8
      Support parallel joins, and make related improvements. · 45be99f8
      Robert Haas authored
      The core innovation of this patch is the introduction of the concept
      of a partial path; that is, a path which if executed in parallel will
      generate a subset of the output rows in each process.  Gathering a
      partial path produces an ordinary (complete) path.  This allows us to
      generate paths for parallel joins by joining a partial path for one
      side (which at the baserel level is currently always a Partial Seq
      Scan) to an ordinary path on the other side.  This is subject to
      various restrictions at present, especially that this strategy seems
      unlikely to be sensible for merge joins, so only nested loops and
      hash joins paths are generated.
      
      This also allows an Append node to be pushed below a Gather node in
      the case of a partitioned table.
      
      Testing revealed that early versions of this patch made poor decisions
      in some cases, which turned out to be caused by the fact that the
      original cost model for Parallel Seq Scan wasn't very good.  So this
      patch tries to make some modest improvements in that area.
      
      There is much more to be done in the area of generating good parallel
      plans in all cases, but this seems like a useful step forward.
      
      Patch by me, reviewed by Dilip Kumar and Amit Kapila.
      45be99f8
      History
      Support parallel joins, and make related improvements.
      Robert Haas authored
      The core innovation of this patch is the introduction of the concept
      of a partial path; that is, a path which if executed in parallel will
      generate a subset of the output rows in each process.  Gathering a
      partial path produces an ordinary (complete) path.  This allows us to
      generate paths for parallel joins by joining a partial path for one
      side (which at the baserel level is currently always a Partial Seq
      Scan) to an ordinary path on the other side.  This is subject to
      various restrictions at present, especially that this strategy seems
      unlikely to be sensible for merge joins, so only nested loops and
      hash joins paths are generated.
      
      This also allows an Append node to be pushed below a Gather node in
      the case of a partitioned table.
      
      Testing revealed that early versions of this patch made poor decisions
      in some cases, which turned out to be caused by the fact that the
      original cost model for Parallel Seq Scan wasn't very good.  So this
      patch tries to make some modest improvements in that area.
      
      There is much more to be done in the area of generating good parallel
      plans in all cases, but this seems like a useful step forward.
      
      Patch by me, reviewed by Dilip Kumar and Amit Kapila.