From: | Amit Langote <Langote_Amit_f8(at)lab(dot)ntt(dot)co(dot)jp> |
---|---|
To: | Robert Haas <robertmhaas(at)gmail(dot)com> |
Cc: | Pg Hackers <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: path toward faster partition pruning |
Date: | 2017-09-06 10:38:08 |
Message-ID: | 0e829199-a43c-2a66-b966-89a0020a6cd4@lab.ntt.co.jp |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On 2017/09/04 10:10, Amit Langote wrote:
> On 2017/09/02 2:52, Robert Haas wrote:
>> It strikes me that this patch set is doing two things but maybe in the
>> opposite order that I would have chosen to attack them. First,
>> there's getting partition pruning to use something other than
>> constraint exclusion. Second, there's deferring work that is
>> currently done at an early stage of the process until later, so that
>> we waste less effort on partitions that are ultimately going to be
>> pruned.
>
> OK.
>
>> Therefore, IMHO, it would be best to focus first on how we're going to
>> identify the partitions that survive pruning, and then afterwards work
>> on transposing that logic to happen before partitions are opened and
>> locked. That way, we get some incremental benefit sooner, and also
>> unblock some other development work.
>
> Alright, I will try to do it that way.
Attached set of patches that does things that way. Individual patches
described below:
[PATCH 1/5] Expand partitioned inheritance in a non-flattened manner
This will allow us to perform scan and join planning in a per partition
sub-tree manner, with each sub-tree's root getting its own RelOptInfo.
Previously, only the root of the whole partition tree would get a
RelOptInfo, along with the leaf partitions, with each leaf partition's
AppendRelInfo pointing to the former as its parent.
This is essential, because we will be doing partition-pruning for every
partitioned table in the tree by matching query's scan keys with its
partition key. We won't be able to do that if the intermediate
partitioned tables didn't have a RelOptInfo.
[PATCH 2/5] WIP: planner-side changes for partition-pruning
This patch adds a stub get_partitions_for_keys in partition.c with a
suitable interface for the caller to pass bounding keys extracted from the
query and other related information.
Importantly, it implements the logic within the planner to match query's
scan keys to a parent table's partition key and form the bounding keys
that will be passed to partition.c to compute the list of partitions that
satisfy those bounds.
Also, it adds certain fields to RelOptInfos of the partitioned tables that
reflect its partitioning properties.
[PATCH 3/5] WIP: Interface changes for partition_bound_{cmp/bsearch}
This guy modifies the partition bound comparison function so that the
caller can pass incomplete partition key tuple that is potentially a
prefix of a multi-column partition key. Currently, the input tuple must
contain all of key->partnatts values, but that may not be true for
queries, which may not have restrictions on all the partition key columns.
[PATCH 4/5] WIP: Implement get_partitions_for_keys()
This one fills the get_partitions_for_keys stub with the actual logic that
searches the partdesc->boundinfo for partition bounds that match the
bounding keys specified by the caller.
[PATCH 5/5] Add more tests for the new partitioning-related planning
More tests.
Some TODO items still remain to be done:
* Process OR clauses to use for partition-pruning
* Process redundant clauses (such as a = 10 and a > 1) more smartly
* Other tricks that are missing
* Fix bugs
* More tests
Thanks,
Amit
Attachment | Content-Type | Size |
---|---|---|
0001-Expand-partitioned-inheritance-in-a-non-flattened-ma.patch | text/plain | 13.9 KB |
0002-WIP-planner-side-changes-for-partition-pruning.patch | text/plain | 28.7 KB |
0003-WIP-Interface-changes-for-partition_bound_-cmp-bsear.patch | text/plain | 9.1 KB |
0004-WIP-Implement-get_partitions_for_keys.patch | text/plain | 6.9 KB |
0005-Add-more-tests-for-the-new-partitioning-related-plan.patch | text/plain | 20.4 KB |
From | Date | Subject | |
---|---|---|---|
Next Message | Daniel Gustafsson | 2017-09-06 10:43:03 | Re: Copyright in partition.h and partition.c |
Previous Message | Amit Langote | 2017-09-06 10:14:35 | Re: dropping partitioned tables without CASCADE |