pgsql: Support parallel joins, and make related improvements.

Started by Robert Haasover 10 years ago4 messagescomitters
Jump to latest
#1Robert Haas
robertmhaas@gmail.com

Support parallel joins, and make related improvements.

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.

Branch
------
master

Details
-------
http://git.postgresql.org/pg/commitdiff/45be99f8cd5d606086e0a458c9c72910ba8a613d

Modified Files
--------------
src/backend/executor/execParallel.c | 66 +++---
src/backend/nodes/outfuncs.c | 4 +-
src/backend/optimizer/README | 55 ++++-
src/backend/optimizer/path/allpaths.c | 164 ++++++++++----
src/backend/optimizer/path/costsize.c | 61 ++++--
src/backend/optimizer/path/joinpath.c | 253 +++++++++++++++++++++-
src/backend/optimizer/path/joinrels.c | 3 +-
src/backend/optimizer/plan/createplan.c | 2 +-
src/backend/optimizer/plan/planmain.c | 3 +-
src/backend/optimizer/util/pathnode.c | 361 ++++++++++++++++++++++++++++---
src/backend/optimizer/util/relnode.c | 2 +
src/include/nodes/relation.h | 4 +-
src/include/optimizer/cost.h | 2 +-
src/include/optimizer/pathnode.h | 12 +-
src/include/optimizer/paths.h | 2 +
15 files changed, 875 insertions(+), 119 deletions(-)

--
Sent via pgsql-committers mailing list (pgsql-committers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-committers

#2Bruce Momjian
bruce@momjian.us
In reply to: Robert Haas (#1)
Re: pgsql: Support parallel joins, and make related improvements.

On Wed, Jan 20, 2016 at 07:41:07PM +0000, Robert Haas wrote:

Support parallel joins, and make related improvements.

Wow, that is big news!

--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://enterprisedb.com

+ As you are, so once was I. As I am, so you will be. +
+ Roman grave inscription                             +

--
Sent via pgsql-committers mailing list (pgsql-committers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-committers

#3Michael Paquier
michael@paquier.xyz
In reply to: Bruce Momjian (#2)
Re: pgsql: Support parallel joins, and make related improvements.

On Thu, Jan 21, 2016 at 7:59 AM, Bruce Momjian <bruce@momjian.us> wrote:

On Wed, Jan 20, 2016 at 07:41:07PM +0000, Robert Haas wrote:

Support parallel joins, and make related improvements.

Wow, that is big news!

Yuhu!
--
Michael

--
Sent via pgsql-committers mailing list (pgsql-committers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-committers

In reply to: Robert Haas (#1)
Re: pgsql: Support parallel joins, and make related improvements.

On Wed, Jan 20, 2016 at 11:41 AM, Robert Haas <rhaas@postgresql.org> wrote:

Support parallel joins, and make related improvements.

Congratulations to all involved.

--
Peter Geoghegan

--
Sent via pgsql-committers mailing list (pgsql-committers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-committers