On Wed, Apr 1, 2015 at 6:30 AM, Amit Kapila <amit.kapil...@gmail.com> wrote:
> On Mon, Mar 30, 2015 at 8:35 PM, Robert Haas <robertmh...@gmail.com> wrote:
>> So, suppose we have a plan like this:
>>
>> Append
>> -> Funnel
>>   -> Partial Seq Scan
>> -> Funnel
>>   -> Partial Seq Scan
>> (repeated many times)
>>
>> In earlier versions of this patch, that was chewing up lots of DSM
>> segments.  But it seems to me, on further reflection, that it should
>> never use more than one at a time.  The first funnel node should
>> initialize its workers and then when it finishes, all those workers
>> should get shut down cleanly and the DSM destroyed before the next
>> scan is initialized.
>>
>> Obviously we could do better here: if we put the Funnel on top of the
>> Append instead of underneath it, we could avoid shutting down and
>> restarting workers for every child node.  But even without that, I'm
>> hoping it's no longer the case that this uses more than one DSM at a
>> time.  If that's not the case, we should see if we can't fix that.
>>
> Currently it doesn't behave you are expecting, it destroys the DSM and
> perform clean shutdown of workers (DestroyParallelContext()) at the
> time of ExecEndFunnel() which in this case happens when we finish
> Execution of AppendNode.
>
> One way to change it is do the clean up for parallel context when we
> fetch last tuple from the FunnelNode (into ExecFunnel) as at that point
> we are sure that we don't need workers or dsm anymore.  Does that
> sound reasonable to you?

Yeah, I think that's exactly what we should do.

-- 
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to