Re: [HACKERS] background sessions - Mailing list pgsql-hackers

From Pavel Stehule
Subject Re: [HACKERS] background sessions
Date
Msg-id CAFj8pRDPSYXYydgD+eHO-uVH=Tb0Qs-DSE_JB+HC=zyKf1=jPg@mail.gmail.com
Whole thread Raw
In response to Re: [HACKERS] background sessions  (Robert Haas <robertmhaas@gmail.com>)
Responses Re: [HACKERS] background sessions  (Robert Haas <robertmhaas@gmail.com>)
List pgsql-hackers


2017-03-13 21:22 GMT+01:00 Robert Haas <robertmhaas@gmail.com>:
On Sat, Mar 11, 2017 at 10:11 AM, Pavel Stehule <pavel.stehule@gmail.com> wrote:
> 2017-03-09 14:52 GMT+01:00 Peter Eisentraut
> <peter.eisentraut@2ndquadrant.com>:
>>
>> On 3/8/17 14:22, Pavel Stehule wrote:
>> > 1. will be background session process closed automatically when parent
>> > process is closed?
>>
>> If the communications queue goes away the process will eventually die.
>> This is similar to how a backend process will eventually die if the
>> client goes away.  Some more testing would be good here.
>
>
> what means "eventually die"?
>
> I called pg_sleep() in called subprocess.
>
> Cancel, terminating parent process has not any effect. It is maybe
> artificial test.
>
> Little bit more realistic - waiting on table lock in background worker was
> successful - and when parent was cancelled, then worker process was
> destroyed too.
>
> But when parent was terminated, then background worker process continued.
>
> What is worse - the background worker had 100% CPU and I had to restart
> notebook.
>
> CREATE OR REPLACE FUNCTION public.foo()
>  RETURNS void
>  LANGUAGE plpythonu
> AS $function$
> with plpy.BackgroundSession() as a:
>   a.execute('update foo2 set a = 30')
>   a.execute('insert into foo2 values(10)')
> $function$
> postgres=#
>
>
> I blocked foo2 in another session.

I'm not sure what's going on with this patch set, but in general a
background process can't just go away when the foreground process goes
away.  We could arrange to kill it, a la pg_terminate_backend(), or we
can let it keep running, and either of those things might be what
somebody wants, depending on the situation.  But it can't just vanish
into thin air.

I understand, so there are not one solution only - and process maintenance is hard.  

Very often strategy can be recheck of parent process  in some waiting cycles. It should not to impact performance. 

I afraid so some waiting times in bg process can be high probable with this patch - and then is probable so somebody use pg_terminate_backend. This situation should not to finish by server restart.

Regards

Pavel
 

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

pgsql-hackers by date:

Previous
From: Michael Paquier
Date:
Subject: Re: [HACKERS] allow referring to functions without arguments when unique
Next
From: tushar
Date:
Subject: Re: [HACKERS] increasing the default WAL segment size