Thread: How to detect Postgres deadlocks?
Hi,
We are using Postgres 7.4.5, and I'm trying to find a way to detect and gather deadlock information.
1) Which sql queries should I use to detect deadlocks while they are happening? I see the deadlock info on the log file, but I'd like to query the database to see them as they happen...
2) Which fields on which pg catalogs indicate a deadlock condition?
3) How can I get more info about the processes involved on deadlocks?
4) How can I get the sql statements associated with the processes involved on deadlocks?
On the logs I see the procpids of the processes involved on past deadlocks, but I 'd like to know how to get those procpids, and how to get the "current_query" associated with them...
Thank you in advance,
Andre Philippi
We are using Postgres 7.4.5, and I'm trying to find a way to detect and gather deadlock information.
1) Which sql queries should I use to detect deadlocks while they are happening? I see the deadlock info on the log file, but I'd like to query the database to see them as they happen...
2) Which fields on which pg catalogs indicate a deadlock condition?
3) How can I get more info about the processes involved on deadlocks?
4) How can I get the sql statements associated with the processes involved on deadlocks?
On the logs I see the procpids of the processes involved on past deadlocks, but I 'd like to know how to get those procpids, and how to get the "current_query" associated with them...
Thank you in advance,
Andre Philippi
On Wed, 2006-08-23 at 14:45, andre wrote: > Hi, > > We are using Postgres 7.4.5, and I'm trying to find a way to detect > and gather deadlock information. > > 1) Which sql queries should I use to detect deadlocks while they are > happening? I see the deadlock info on the log file, but I'd like to > query the database to see them as they happen... > > 2) Which fields on which pg catalogs indicate a deadlock condition? > > 3) How can I get more info about the processes involved on deadlocks? > > 4) How can I get the sql statements associated with the processes > involved on deadlocks? > > On the logs I see the procpids of the processes involved on past > deadlocks, but I 'd like to know how to get those procpids, and how to > get the "current_query" associated with them... I'm not sure what you're really looking for. When PostgreSQL detects a deadlock, it aborts one of the queries to stop the deadlock right away. test=> update l set b=22 where i=2; ERROR: deadlock detected DETAIL: Process 25854 waits for ShareLock on transaction 11654043; blocked by process 24918. Process 24918 waits for ShareLock on transaction 11654047; blocked by process 25854. test=> That deadlock detection took about 1 second and rolled back my transaction immediately. I'm not sure you can detect them in real time any better than pgsql can. Or are you experiencing some kind of deadly embrace problem??? Tell us what problem you're having and maybe we can come up with some better advice.