Hi Jesper,
On 2019/03/20 23:25, Jesper Pedersen wrote:> Hi,
>
> On 3/19/19 11:15 PM, Imai, Yoshikazu wrote:
>> Here the details.
>>
>> [creating partitioned tables (with 1024 partitions)]
>> drop table if exists rt;
>> create table rt (a int, b int, c int) partition by range (a);
>> \o /dev/null
>> select 'create table rt' || x::text || ' partition of rt for values
>> from (' ||
>> (x)::text || ') to (' || (x+1)::text || ');' from generate_series(1,
>> 1024) x;
>> \gexec
>> \o
>>
>> [select1024.sql]
>> \set a random (1, 1024)
>> select * from rt where a = :a;
>>
>> [pgbench]
>> pgbench -n -f select1024.sql -T 60
>>
>>
>
> My tests - using hash partitions - shows that the extra time is spent in
> make_partition_pruneinfo() for the relid_subplan_map variable.
>
> 64 partitions: make_partition_pruneinfo() 2.52%
> 8192 partitions: make_partition_pruneinfo() 5.43%
>
> TPS goes down ~8% between the two. The test setup is similar to the
above.
>
> Given that Tom is planning to change the List implementation [1] in 13 I
> think using the palloc0 structure is ok for 12 before trying other
> implementation options.
>
> perf sent off-list.
>
> [1]
https://www.postgresql.org/message-id/24783.1551568303%40sss.pgh.pa.us
>
> Best regards,
> Jesper
>
>
Thanks for testing.
Yeah, after code looking, I think bottleneck seems be lurking in another
place where this patch doesn't change. I also think the patch is ok as
it is for 12, and this problem will be fixed in 13.
--
Yoshikazu Imai