Re: [HACKERS] path toward faster partition pruning
От | Amit Langote |
---|---|
Тема | Re: [HACKERS] path toward faster partition pruning |
Дата | |
Msg-id | 0e829199-a43c-2a66-b966-89a0020a6cd4@lab.ntt.co.jp обсуждение исходный текст |
Ответ на | Re: [HACKERS] path toward faster partition pruning (Amit Langote <Langote_Amit_f8@lab.ntt.co.jp>) |
Ответы |
Re: [HACKERS] path toward faster partition pruning
Re: [HACKERS] path toward faster partition pruning |
Список | 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 -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers
Вложения
В списке pgsql-hackers по дате отправления: