Re: Kill a session - Mailing list pgsql-performance
From | Craig A. James |
---|---|
Subject | Re: Kill a session |
Date | |
Msg-id | 44B51896.1000808@modgraph-usa.com Whole thread Raw |
In response to | Re: Kill a session ("Magnus Hagander" <mha@sollentuna.net>) |
Responses |
Re: Kill a session
Re: Kill a session Re: Kill a session Re: Kill a session |
List | pgsql-performance |
Magnus Hagander wrote: >> 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? > > 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. In other words, are you confirming that there is no way to kill a query from another process, other than shutting down thedatabase? My understanding of the documentation tells me I can't use cancel, because the process doing the killing isn'tthe original process. >> 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... > 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. It turns out I was confused by this: ps(1) reports a process called "postgres", but top(1) reports a process called "postmaster",but they both have the same pid. I guess postmaster replaces its own name in the process table when it's executinga query, and it's not really the postmaster even though top(1) calls it postmaster. So "kill -15 <pid>" is NOT killing the process -- to kill the process, I have to use signal 9. But if I do that, ALL queriesin progress are aborted. I might as well shut down and restart the database, which is an unacceptable solution fora web site. I'm back to my original question: How do you kill a runaway query without bringing down the whole database? Is there reallyno answer to this? Thanks, Craig
pgsql-performance by date: