Thanks for the ideas, I tested them:
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)
The question is - could we do something to fix it?
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).
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. |