Re: keep alive and running query

From: desmodemone <desmodemone(at)gmail(dot)com>
To: Albe Laurenz <laurenz(dot)albe(at)wien(dot)gv(dot)at>
Cc: "pgsql-admin(at)postgresql(dot)org" <pgsql-admin(at)postgresql(dot)org>
Subject: Re: keep alive and running query
Date: 2013-12-16 09:59:04
Message-ID: CAEs9oFkFBnoegCtRv-SD7g2BWGZL1n5Qup6ewrcFDVzfVn56kw@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-admin

2013/12/16 Albe Laurenz <laurenz(dot)albe(at)wien(dot)gv(dot)at>

> desmodemone wrote:
> > As I tested and saw until now, the keep alive functions as follow [if I
> understand correctly and it's
> > not a bug] :
> >
> > When a connection it's in idle state or in idle in transaction, if the
> connection with client it's
> > broken for a number of keep alive, the backend will be terminated.
> >
> >
> > By the way if this could be ok in an OLTP enviroment, because the
> average time of a query is << the
> > time of keep alive, in a DWH enviroment could be a problem.
> >
> > Imagine your application server, where there is an ETL, will go down for
> 1 minute and your
> > transactions are still running on the DWH database, that transactions
> could run for hours before the
> >
> > keep alive will terminate them, because they are in transaction state
> and not idle or idle in
> > transaction.
>
> TCP keepalive will also terminate a session that is currently
> stuck in a long running SQL query if the client end dies.
>
> I think that your problem is that you mix up different meanings of "idle".
>
> In PostgreSQL, a connection is idle (or idle in transaction) if processing
> of the last command is finished and the server is waiting for the next
> command from the client.
>
> In TCP, a connection is idle if there is no network traffic.
>
> Yours,
> Laurenz Albe
>

Hello Laurenz,
so I have a strange behavior on some test servers.
I am using Centos 6.4 and I set up the tcp keep alive kernel parameter very
low to see the effects [the postgresql.conf parameter have 0 value so use
the OS value] :

net.ipv4.tcp_keepalive_intvl = 2
net.ipv4.tcp_keepalive_probes = 2
net.ipv4.tcp_keepalive_time = 1

then I run a long query from a remote client and I kill that "psql client"
. By the way, even even if after long time, the query remains alive,
until it finishes and it returns error because could not return the row to
the client.

If I do the same with an update, it's the same except become idle in
transaction and only after then it's killed .

So, if " TCP keepalive will also terminate a session that is currently
stuck in a long running SQL query if the client end dies." ,
what is wrong on the setup ? Could someone try the tcp keep alive or
explain why is not working as expected ?

Have a nice day

Mat

In response to

Responses

Browse pgsql-admin by date

  From Date Subject
Next Message Albe Laurenz 2013-12-16 11:09:51 Re: keep alive and running query
Previous Message Albe Laurenz 2013-12-16 09:31:48 Re: keep alive and running query