|From:||Amit Langote <Langote_Amit_f8(at)lab(dot)ntt(dot)co(dot)jp>|
|To:||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>|
|Cc:||Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, David Rowley <david(dot)rowley(at)2ndquadrant(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|
|Views:||Raw Message | Whole Thread | Download mbox | Resend email|
On 2019/03/22 11:17, Amit Langote wrote:
> However, looking into make_partitionedrel_pruneinfo(), it seems that it's
> unconditionally allocating 3 arrays that all have nparts elements:
> subplan_map = (int *) palloc0(nparts * sizeof(int));
> subpart_map = (int *) palloc0(nparts * sizeof(int));
> relid_map = (Oid *) palloc0(nparts * sizeof(int));
> So, that part has got to cost more as the partition count grows.
> This is the code for runtime pruning, which is not exercised in our tests,
> so it might seem odd that we're spending any time here at all. I've been
> told that we have to perform at least *some* work here if only to conclude
> that runtime pruning is not needed and it seems that above allocations
> occur before making that conclusion. Maybe, that's salvageable by
> rearranging this code a bit. David may be in a better position to help
> with that.
I took a stab at this. I think rearranging the code in
make_partitionedrel_pruneinfo() slightly will take care of this.
The problem is that make_partitionedrel_pruneinfo() does some work which
involves allocating arrays containing nparts elements and then looping
over the part_rels array to fill values in those arrays that will be used
by run-time pruning. It does all that even *before* it has checked that
run-time pruning will be needed at all, which if it is not, it will simply
discard the result of the aforementioned work.
Patch 0008 of 0009 rearranges the code such that we check whether we will
need run-time pruning at all before doing any of the work that's necessary
for run-time to work.
|Next Message||Andrey Borodin||2019-03-22 08:00:05||Re: GiST VACUUM|
|Previous Message||Haribabu Kommi||2019-03-22 07:07:16||Re: Libpq support to connect to standby server as priority|