Search Postgresql Archives

Re: PostgreSQL 12.4 Parallel Query doesn't work while EXPLAIN is OK

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Thanks for the ideas, I tested them:

The essential question here is when the function is executed, so you should use
EXPLAIN (VERBOSE) to see that.

Append  (cost=0.00..5.12 rows=4 width=32)
  ->  Gather  (cost=0.00..1.26 rows=1 width=32)
        Output: plpgsql_function(...)
        Workers Planned: 8
        ->  Parallel Seq Scan on public.table t  (cost=0.00..1.01 rows=1 width=174)
              Output: ...
              Filter: (t.id = 1)
  ->  Gather  (cost=0.00..1.26 rows=1 width=32)
        Output: plpgsql_function(...)
        Workers Planned: 8
        ->  Parallel Seq Scan on public.table t_1  (cost=0.00..1.01 rows=1 width=174)
              Output: ...
              Filter: (t_1.id = 2)

Possible explanations:

- The function is executed after the "Gather" node.

The question is - could we do something to fix it?

 Perhaps you didn't define it as PARALLEL SAFE.

The function is marked as "PARALLEL RESTRICTED” because it’s uses temp tables (and I tested it as PARALLEL SAFE with the same result… parallelisation doesn’t work anyway).


- Perhaps the tables are small.

Yes, but these settings applied when the table is created:

analyze table;
set parallel_setup_cost = 0;
set parallel_tuple_cost = 0;
set force_parallel_mode = on;
alter table table set (parallel_workers = 8);

P.S. Actually, I just need to run in parallel mode one function with a set of different arguments to utilise all available CPUs. That’s strange but I couldn’t google a way to do it.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]

  Powered by Linux