Re: Kill a session

From: "Magnus Hagander" <mha(at)sollentuna(dot)net>
To: "Craig A(dot) James" <cjames(at)modgraph-usa(dot)com>, <pgsql-performance(at)postgresql(dot)org>
Subject: Re: Kill a session
Date: 2006-07-11 11:39:07
Message-ID: 6BCB9D8A16AC4241919521715F4D8BCEA0FAE8@algol.sollentuna.se
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-performance

> There have been dozens, perhaps hundreds, of entries in the
> pg-admin, pg-general, and pg-performance lists regarding
> killing a session, but as far as I can tell, there is no
> Postgres solution. Did I miss something?
>
> This raises the question: Why doesn't Postgres have a "kill
> session" command that works? Oracle has it, and it's
> invaluable; there is no substitute. Various writers to these
> PG lists have raised the question repeatedly. Is it just a
> matter that nobody has had the time to do it (which I
> respect!), or is there a reason why the Postgres team decided
> a "kill session" is a bad idea?

[snip]

I beleive the function to kill a backend is actually in the codebase,
it's just commented out because it's considered dangerous. There are
some possible issues (see -hackers archives) about sending SIGTERM
without actually shutting down the whole cluster.

Doing the client-side function to call is the easy part.

In many cases you just need to cancel a query, in which case you can use
pg_cancel_backend() for exmaple. If you need to actually kill it, your
only supported way is to restart postgresql.

> But in spite earlier posting in these forums that say the
> killing the backend was the way to go, this doesn't really
> work. First, even though the "postgres" backend job is
> properly killed, a "postmaster" job keeps running at 99% CPU,
> which is pretty useless. Killing the client's backend didn't
> kill the process actually doing the work!

Then you killed the wrong backend...

> Second, the "KILLING SESSION" message to stderr is only
> printed in the PG log file sporadically. This confuses me,
> since the "KILLING SESSION" is printed by a *different*
> process than the one being killed, so it shouldn't be
> affected. So what happens to fprintf()'s output? Most of
> the time, I just get "unexpected EOF on client connection" in
> the log which is presumably the postmaster complaining that
> the postgres child process died.

No, that's the postgres chlid process complaining that your client
(CGI?) died without sending a close message.

> I know the kill_session() is working because it returns
> "true", and the job is in fact killed. But the query keeps
> running in postmaster (or is it something else, like a
> rollback?), and the stderr output disappears.

No queries run in postmaster. They all run in postgres backends. The
postmaster does very little actual work, other than keeping track of
everybody else.

//Magnus

In response to

Responses

Browse pgsql-performance by date

  From Date Subject
Next Message Jghaffou 2006-07-11 20:18:19 Unsubscribe
Previous Message Tino Wildenhain 2006-07-11 07:39:40 Re: Kill a session