Query gone wild

Started by Garo Hussenjianabout 23 years ago5 messagesgeneral
Jump to latest
#1Garo Hussenjian
garo@xapnet.com

I'm trying to track down a query in a web application that has postgresql in
a deadlock. I don't know which query is running because I only see the
listing in ps aux (for now, anyway)... Is there any way to view the query
that is being run from knowing a process id?

Garo.

=-=-==-=-=-==

Xapnet Internet Solutions
1501 Powell St., Suite N
Emeryville, CA 94608

Tel - (510) 655-9771
Fax - (510) 655-9775
Web - http://www.xapnet.com

#2Neil Conway
neilc@samurai.com
In reply to: Garo Hussenjian (#1)
Re: Query gone wild

On Wed, 2003-01-29 at 12:58, Garo Hussenjian wrote:

I'm trying to track down a query in a web application that has postgresql in
a deadlock.

By "deadlock", what exactly do you mean?

Is there any way to view the query
that is being run from knowing a process id?

You can use the pg_stat_activity view in PostgreSQL 7.2 and later -- see
the docs for more information:

http://www.ca.postgresql.org/users-lounge/docs/7.3/postgres/monitoring-stats.html

Cheers,

Neil

#3Tom Lane
tgl@sss.pgh.pa.us
In reply to: Neil Conway (#2)
Re: Query gone wild

Neil Conway <neilc@samurai.com> writes:

On Wed, 2003-01-29 at 12:58, Garo Hussenjian wrote:

Is there any way to view the query
that is being run from knowing a process id?

You can use the pg_stat_activity view in PostgreSQL 7.2 and later -- see

However, he probably doesn't have stats_command_string turned on, or
he'd already be aware of pg_stat_activity :-(. So this isn't much help
if the problem is to determine what an already-running query is.

Another possibility is to attach to the runaway process with a debugger
and print debug_query_string. For example, with gdb:

$ gdb /path/to/postgres-executable
gdb> attach PID-OF-PROCESS
gdb> p debug_query_string
gdb> quit

This should work unless you are running a stripped backend executable.
(On many systems, the "file" command can tell you whether an executable
has been stripped of debug symbols.)

regards, tom lane

#4codeWarrior
GPatnude@adelphia.net
In reply to: Garo Hussenjian (#1)
Re: Query gone wild

You might locate the process id with ps.... If someone has a connection on
the DB -- It'll show the IP address of the user and a pid...

--> ps ax | grep postgres

"Garo Hussenjian" <garo@xapnet.com> wrote in message
news:BA5D5658.6E5D%garo@xapnet.com...

I'm trying to track down a query in a web application that has postgresql

in

Show quoted text

a deadlock. I don't know which query is running because I only see the
listing in ps aux (for now, anyway)... Is there any way to view the query
that is being run from knowing a process id?

Garo.

=-=-==-=-=-==

Xapnet Internet Solutions
1501 Powell St., Suite N
Emeryville, CA 94608

Tel - (510) 655-9771
Fax - (510) 655-9775
Web - http://www.xapnet.com

---------------------------(end of broadcast)---------------------------
TIP 4: Don't 'kill -9' the postmaster

#5Garo Hussenjian
garo@xapnet.com
In reply to: Tom Lane (#3)
Re: Query gone wild

on 1/29/03 11:11 AM, Tom Lane at tgl@sss.pgh.pa.us wrote:

Neil Conway <neilc@samurai.com> writes:

On Wed, 2003-01-29 at 12:58, Garo Hussenjian wrote:

Is there any way to view the query
that is being run from knowing a process id?

You can use the pg_stat_activity view in PostgreSQL 7.2 and later -- see

However, he probably doesn't have stats_command_string turned on, or
he'd already be aware of pg_stat_activity :-(. So this isn't much help
if the problem is to determine what an already-running query is.

Another possibility is to attach to the runaway process with a debugger
and print debug_query_string. For example, with gdb:

$ gdb /path/to/postgres-executable
gdb> attach PID-OF-PROCESS
gdb> p debug_query_string
gdb> quit

Thanks, Tom.

Here's what I got going...

semerjia% gdb usr/local/pgsql/bin/postmaster
GNU gdb 4.18
< MORE GDB STUFF... >
(gdb) attach 43179
Attaching to program: /usr/home/semerjia/usr/local/pgsql/bin/postmaster,
process 43179
Reading symbols from /usr/lib/libz.so.2...done.
Reading symbols from /usr/lib/libcrypt.so.2...done.
Reading symbols from /usr/lib/libm.so.2...done.
Reading symbols from /usr/lib/libutil.so.3...done.
Reading symbols from /usr/lib/libreadline.so.4...done.
Reading symbols from /usr/lib/libc.so.4...done.
Reading symbols from /usr/lib/libncurses.so.5...done.
Reading symbols from /usr/libexec/ld-elf.so.1...done.
0x28346088 in read () from /usr/lib/libc.so.4
(gdb) p debug_query_string
$1 = 138514480
(gdb)

This should work unless you are running a stripped backend executable.
(On many systems, the "file" command can tell you whether an executable
has been stripped of debug symbols.)

I can't tell if this worked... What is '$1 = 138514480'. After running gdb,
the process STAT for 42179 changed from R to T so I kill'ed it...

regards, tom lane

---------------------------(end of broadcast)---------------------------
TIP 6: Have you searched our list archives?

http://archives.postgresql.org

=-=-==-=-=-==

Xapnet Internet Solutions
1501 Powell St., Suite N
Emeryville, CA 94608

Tel - (510) 655-9771
Fax - (510) 655-9775
Web - http://www.xapnet.com