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
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 |