Re: Parallel sec scan in plpgsql - Mailing list pgsql-hackers

From Alex Ignatov
Subject Re: Parallel sec scan in plpgsql
Date
Msg-id 95c75bb0-a418-30cd-ff40-53eef1b27f48@postgrespro.ru
Whole thread Raw
In response to Re: Parallel sec scan in plpgsql  (Amit Kapila <amit.kapila16@gmail.com>)
Responses Re: Parallel sec scan in plpgsql  (Amit Kapila <amit.kapila16@gmail.com>)
List pgsql-hackers
On 16.09.2016 16:50, Amit Kapila wrote:
> On Fri, Sep 16, 2016 at 6:57 PM, Alex Ignatov <a.ignatov@postgrespro.ru> wrote:
>> No it doesn't.
>> Paralleling neither sql function nor plpgsql:
>> Here is example :
>>
>> ipdr=> show max_worker_processes ;
>>  max_worker_processes
>> ----------------------
>>  128
>> (1 row)
>> ipdr=> set max_parallel_workers_per_gather to 128;
>> SET
>> ipdr=> set force_parallel_mode=on;
>> SET
>> ipdr=> set min_parallel_relation_size =0;
>> SET
>> ipdr=> set parallel_tuple_cost=0;
>> SET
>>
>
> Can you try by setting force_parallel_mode = off;?  I think it is
> sending the whole function execution to worker due to
> force_parallel_mode.
>
>

No changes:

ipdr=> set max_parallel_workers_per_gather to 128;
SET
ipdr=> set min_parallel_relation_size =0;
SET
ipdr=> set parallel_tuple_cost=0;
SET
ipdr=> set force_parallel_mode = off;
SET
ipdr=> select name,setting from pg_settings where name in('max_parallel_workers_per_gather',
ipdr(>                                                    'min_parallel_relation_size',
ipdr(>                                                    'parallel_tuple_cost',
ipdr(>                                                    'force_parallel_mode');              name               |
setting
---------------------------------+--------- force_parallel_mode             | off max_parallel_workers_per_gather | 128
min_parallel_relation_size     | 0 parallel_tuple_cost             | 0
 
(4 rows)

ipdr=> explain (analyze,buffers) select count(*) from (select a,b,c,d,e,sum(bytes) from test group by a,b,c,d,e)t;
                                                            QUERY PLAN
 

-------------------------------------------------------------------------------------------------------------------------------------------------
Aggregate (cost=87702.33..87702.34 rows=1 width=8) (actual time=709.643..709.643 rows=1 loops=1)   Buffers: shared
hit=65015  ->  Finalize HashAggregate  (cost=87364.49..87514.64 rows=15015 width=28) (actual time=706.382..708.456
rows=15015loops=1)         Group Key: test.a, test.b, test.c, test.d, test.e         Buffers: shared hit=65015
-> Gather  (cost=85149.78..85299.93 rows=165165 width=20) (actual time=478.626..645.209 rows=180180 loops=1)
  Workers Planned: 11               Workers Launched: 11               Buffers: shared hit=65015               ->
PartialHashAggregate  (cost=84149.78..84299.93 rows=15015 width=20) (actual time=473.890..478.309 rows=15015 loops=12)
                  Group Key: test.a, test.b, test.c, test.d, test.e                     Buffers: shared hit=63695
             ->  Parallel Seq Scan on test  (cost=0.00..72786.01 rows=909101 width=20) (actual time=0.021..163.120
rows=833333loops=12)                           Buffers: shared hit=63695 Planning time: 0.318 ms Execution time:
710.600ms
 
(16 rows)


ipdr=> explain (analyze,buffers) select  parallel_test_plpgsql();                                        QUERY PLAN
------------------------------------------------------------------------------------------ Result  (cost=0.00..0.26
rows=1width=8) (actual time=4003.719..4003.720 rows=1 loops=1)   Buffers: shared hit=63869 Planning time: 0.021 ms
Executiontime: 4003.769 ms
 
(4 rows)

auto_explain:
2016-09-16 18:02:29 MSK [29353]: [53-1] user=ipdr,db=ipdr,app=psql,client=[local] LOG:  duration: 4001.275 ms  plan:
   Query Text: select count(*)          from (select a,b,c,d,e,sum(bytes) from test group by a,b,c,d,e)t
Aggregate (cost=289035.43..289035.44 rows=1 width=8)          ->  HashAggregate  (cost=288697.59..288847.74 rows=15015
width=28)               Group Key: test.a, test.b, test.c, test.d, test.e                ->  Seq Scan on test
(cost=0.00..163696.15rows=10000115 width=20)
 
2016-09-16 18:02:29 MSK [29353]: [54-1] user=ipdr,db=ipdr,app=psql,client=[local] CONTEXT:  SQL statement "select
count(*)         from (select a,b,c,d,e,sum(bytes) from test group by a,b,c,d,e)t"        PL/pgSQL function
parallel_test_plpgsql()line 5 at SQL statement
 


ipdr=> explain (analyze,buffers) select  parallel_test_plpgsql();                                        QUERY PLAN
------------------------------------------------------------------------------------------ Result  (cost=0.00..0.26
rows=1width=8) (actual time=4497.820..4497.822 rows=1 loops=1)   Buffers: shared hit=63695 Planning time: 0.023 ms
Executiontime: 4497.872 ms
 
(4 rows)

auto_explain:
2016-09-16 18:03:23 MSK [29353]: [57-1] user=ipdr,db=ipdr,app=psql,client=[local] LOG:  duration: 4497.050 ms  plan:
   Query Text: select count(*)          from (select a,b,c,d,e,sum(bytes) from test group by a,b,c,d,e)t
Aggregate (cost=289035.43..289035.44 rows=1 width=8)          ->  HashAggregate  (cost=288697.59..288847.74 rows=15015
width=28)               Group Key: test.a, test.b, test.c, test.d, test.e                ->  Seq Scan on test
(cost=0.00..163696.15rows=10000115 width=20)
 
2016-09-16 18:03:23 MSK [29353]: [58-1] user=ipdr,db=ipdr,app=psql,client=[local] CONTEXT:  SQL statement "select
count(*)         from (select a,b,c,d,e,sum(bytes) from test group by a,b,c,d,e)t"        PL/pgSQL function
parallel_test_plpgsql()line 5 at SQL statement
 






pgsql-hackers by date:

Previous
From: Marco Pfatschbacher
Date:
Subject: Re: PATCH: Keep one postmaster monitoring pipe per process
Next
From: Jeff Janes
Date:
Subject: Re: Hash Indexes