Re: speeding up planning with partitions

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Amit Langote <Langote_Amit_f8(at)lab(dot)ntt(dot)co(dot)jp>
Cc: David Rowley <david(dot)rowley(at)2ndquadrant(dot)com>, Imai Yoshikazu <yoshikazu_i443(at)live(dot)jp>, "jesper(dot)pedersen(at)redhat(dot)com" <jesper(dot)pedersen(at)redhat(dot)com>, "Imai, Yoshikazu" <imai(dot)yoshikazu(at)jp(dot)fujitsu(dot)com>, Amit Langote <amitlangote09(at)gmail(dot)com>, Alvaro Herrera <alvherre(at)2ndquadrant(dot)com>, Robert Haas <robertmhaas(at)gmail(dot)com>, Justin Pryzby <pryzby(at)telsasoft(dot)com>, Pg Hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: speeding up planning with partitions
Date: 2019-04-27 23:10:10
Message-ID: 5526.1556406610@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Amit Langote <Langote_Amit_f8(at)lab(dot)ntt(dot)co(dot)jp> writes:
> On 2019/04/23 7:08, Tom Lane wrote:
>> [ a bunch of stuff ]

> Not sure if you'll like it but maybe we could ignore even regular
> inheritance child targets that are proven to be empty (is_dummy_rel()) for
> a given query during the initial SELECT planning. That way, we can avoid
> re-running relation_excluded_by_constraints() a second time for *all*
> child target relations.

My thought was to keep traditional inheritance working more or less
as it has. To do what you're suggesting, we'd have to move generic
constraint-exclusion logic up into the RTE expansion phase, and I don't
think that's a particularly great idea. I think what we should be
doing is applying partition pruning (which is a very specialized form
of constraint exclusion) during RTE expansion, then applying generic
constraint exclusion in relation_excluded_by_constraints, and not
examining partition constraints again there if we already used them.

> Do you want me to update my patch considering the above summary?

Yes please. However, I wonder whether you're thinking differently in
light of what you wrote in [1]:

>>> Pruning in 10.2 works using internally generated partition constraints
>>> (which for this purpose are same as CHECK constraints). With the new
>>> pruning logic introduced in 11, planner no longer considers partition
>>> constraint because it's redundant to check them in most cases, because
>>> pruning would've selected the right set of partitions. Given that the new
>>> pruning logic is still unable to handle the cases like above, maybe we
>>> could change the planner to consider them, at least until we fix the
>>> pruning logic to handle such cases.

If we take that seriously then it would suggest not ignoring partition
constraints in relation_excluded_by_constraints. However, I'm of the
opinion that we shouldn't let temporary deficiencies in the
partition-pruning logic drive what we do here. I don't think the set
of cases where we could get a win by reconsidering the partition
constraints is large enough to justify the cycles expended in doing so;
and it'll get even smaller as pruning gets smarter.

regards, tom lane

[1] https://www.postgresql.org/message-id/358cd54d-c018-60f8-7d76-55780eef6678@lab.ntt.co.jp

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Alexander Korotkov 2019-04-27 23:57:11 Re: Improve search for missing parent downlinks in amcheck
Previous Message Fabien COELHO 2019-04-27 20:38:50 Re: nRe: [PATCH v1] Show whether tables are logged in \dt+