Wow! That is good to know!

Sent from my iPad

> On Jun 7, 2020, at 5:23 PM, David Rowley <dgrowle...@gmail.com> wrote:
> 
>> On Sun, 7 Jun 2020 at 23:41, MichaelDBA <michael...@sqlexec.com> wrote:
>> The article referenced below assumes a worst case scenario for bulk-loading 
>> with hash partitioned tables.  It assumes that the values being inserted are 
>> in strict ascending or descending order with no gaps (like a sequence number 
>> incrementing by 1), thereby ensuring every partition is hit in order before 
>> repeating the process.  If the values being inserted are not strictly 
>> sequential with no gaps, then the performance is much better.  Obviously, 
>> what part of the tables and indexes are in memory has a lot to do with it as 
>> well.
> 
> In PostgreSQL 12, COPY was modified to support bulk-inserts for
> partitioned tables. This did speed up many scenarios.  Internally, how
> this works is that we maintain a series of multi insert buffers, one
> per partition. We generally only flush those buffers to the table when
> the buffer for the partition fills.  However, there is a sort of
> sanity limit [1] on the number of multi insert buffers we maintain at
> once and currently, that is 32.  Technically we could increase that
> limit, but there would still need to be a limit.  Unfortunately, for
> this particular case, since we're most likely touching between 199-799
> other partitions before hitting the first one again, that will mean
> that we really don't get any multi-inserts, which is likely the reason
> why the performance is worse for hash partitioning.
> 
> With PG12 and for this particular case, you're likely to see COPY
> performance drop quite drastically when going from 32 to 33
> partitions.  The code was more designed for hitting partitions more
> randomly rather than in this sort-of round-robin way that we're likely
> to get from hash partitioning on a serial column.
> 
> David
> 
> [1] 
> https://github.com/postgres/postgres/blob/master/src/backend/commands/copy.c#L2569



Reply via email to