pgsql: Fix parallel index and index-only scans to fall back to serial.

Started by Robert Haasalmost 9 years ago5 messages
#1Robert Haas
rhaas@postgresql.org

Fix parallel index and index-only scans to fall back to serial.

Parallel executor nodes can't assume that parallel execution will
happen in every case where the plan calls for it, because it might
not work out that way. However, parallel index scan and parallel
index-only scan failed to do the right thing here. Repair.

Amit Kapila, per a report from me.

Discussion: /messages/by-id/CAA4eK1Kq5qb_u2AOoda5XBB91vVWz90w=LgtRLgsssriS8pVTw@mail.gmail.com

Branch
------
master

Details
-------
http://git.postgresql.org/pg/commitdiff/09529a70bb5a77935d086d651c63396767d240d7

Modified Files
--------------
src/backend/executor/nodeIndexonlyscan.c | 72 +++++++++++++------------
src/backend/executor/nodeIndexscan.c | 90 ++++++++++++++++++++------------
2 files changed, 96 insertions(+), 66 deletions(-)

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

#2Heikki Linnakangas
hlinnaka@iki.fi
In reply to: Robert Haas (#1)
Re: pgsql: Fix parallel index and index-only scans to fall back to serial.

Hi!

I just bumped into this comment, from commit 09529a70bb5, and I can't
make sense of it:

+               /*
+                * We reach here if the index only scan is not parallel, or if we're
+                * executing a index only scan that was intended to be parallel
+                * serially.
+                */

What was that intended to say?

- Heikki

#3David G. Johnston
david.g.johnston@gmail.com
In reply to: Heikki Linnakangas (#2)
Re: pgsql: Fix parallel index and index-only scans to fall back to serial.

On Fri, Jul 13, 2018 at 12:22 PM, Heikki Linnakangas <hlinnaka@iki.fi>
wrote:

Hi!

I just bumped into this comment, from commit 09529a70bb5, and I can't make
sense of it:

+ /*

+                * We reach here if the index only scan is not parallel,
or if we're
+                * executing a index only scan that was intended to be
parallel
+                * serially.
+                */

What was that intended to say?

​I think...​

​...or if we're serially executing a[n] index only scan that was intended
to be [executed in] parallel​

s/​intended​/planned/ ?

David J.

#4Robert Haas
robertmhaas@gmail.com
In reply to: Heikki Linnakangas (#2)
Re: pgsql: Fix parallel index and index-only scans to fall back to serial.

On Fri, Jul 13, 2018 at 2:22 PM, Heikki Linnakangas <hlinnaka@iki.fi> wrote:

I just bumped into this comment, from commit 09529a70bb5, and I can't make
sense of it:

+               /*
+                * We reach here if the index only scan is not parallel,
or if we're
+                * executing a index only scan that was intended to be
parallel
+                * serially.
+                */

What was that intended to say?

There are two ways that you can reach that code. One is that you have
the thing that shows up in EXPLAIN output as "Index-Only Scan". The
other is that you have the thing that shows up in EXPLAIN output as
"Parallel Index-Only Scan", but you didn't get any workers, so now
you're falling back to running what was intended to be a parallel plan
without parallelism i.e. serially. The comment is intended to alert
you to the fact that an intended-as-parallel scan can end up here in
corner cases where the plan doesn't end up being parallel. We've had
some difficulty in consistently getting that case correct.

If you decide to rephase the comment for clarity, note that there are
three other near-copies of it cf. git grep -C4 'We reach here if'

--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

#5Heikki Linnakangas
hlinnaka@iki.fi
In reply to: Robert Haas (#4)
Re: pgsql: Fix parallel index and index-only scans to fall back to serial.

On 14/07/18 00:56, Robert Haas wrote:

On Fri, Jul 13, 2018 at 2:22 PM, Heikki Linnakangas <hlinnaka@iki.fi> wrote:

I just bumped into this comment, from commit 09529a70bb5, and I can't make
sense of it:

+               /*
+                * We reach here if the index only scan is not parallel,
or if we're
+                * executing a index only scan that was intended to be
parallel
+                * serially.
+                */

What was that intended to say?

There are two ways that you can reach that code. One is that you have
the thing that shows up in EXPLAIN output as "Index-Only Scan". The
other is that you have the thing that shows up in EXPLAIN output as
"Parallel Index-Only Scan", but you didn't get any workers, so now
you're falling back to running what was intended to be a parallel plan
without parallelism i.e. serially. The comment is intended to alert
you to the fact that an intended-as-parallel scan can end up here in
corner cases where the plan doesn't end up being parallel. We've had
some difficulty in consistently getting that case correct.

Ah, gotcha. I changed that (and the other copies) per David's suggestion.

- Heikki