On Sun, 2021-02-14 at 22:47 +1300, David Rowley wrote:
> On Sun, 14 Feb 2021 at 13:15, Seamus Abshere
> 
> <sabsh...@alumni.princeton.edu> wrote:
> 
> > The comment from Robert says: (src/backend/optimizer/path/allpaths.c)
> >                  /*
> >                   * If the use of parallel append is permitted, always 
> > request at least
> >                   * log2(# of children) workers.
> > In my case, every partition takes 1 second to scan, I have 64 cores, I have 
> > 64 partitions, and the wall time is 8 seconds with 8 workers.
> > I assume that if it it planned significantly more workers (16? 32? even 
> > 64?), it would get significantly faster (even accounting for transaction 
> > cost). So why doesn't it ask for more? Note that
> > I've set max_parallel_workers=512, etc. (postgresql.conf in my first 
> > message).
> 
> There's perhaps an argument for allowing ALTER TABLE <partitioned
> table> SET (parallel_workers=N); to be set on partitioned tables, but
> we don't currently allow it.

That would be great; I have been hit by this before.

> What you might want to try is setting that for any of those 64
> partitions.  Shortly above the code comment that you quoted above,
> there's some code that finds the path for the partition with the
> maximum number of parallel workers. If one of those partitions is
> using, say 64 workers because you set the partitions
> "parallel_workers" setting to 64, and providing you have
> max_parallel_workers_per_gather set highly enough, then your Append
> should get 64 workers.

Hmm - that didn't work when I tried it, but perhaps I should try again.

> You'll need to be careful though since changing the partitions
> parallel_workers may affect things for other queries too. Also, if you
> were to only change 1 partition and that partition were to be pruned,
> then you'd not get the 64 workers.

I think this is an area where parallel query could be improved.

One think is runtime partition pruning:  if the optimizer thinks that
it will have to scan a lot of partitions, it will plan a lot of workers.
But if the executor reduces that number to 1, we end up with way too
many workers.

Yours,
Laurenz Albe
-- 
Cybertec | https://www.cybertec-postgresql.com



Reply via email to