Thread: How to get info about deadlocks?
I've been experimenting with concurrent VACUUMs and getting occasional instances of NOTICE: Deadlock detected -- See the lock(l) manual page for a possible cause. ERROR: WaitOnLock: error on wakeup - Aborting this transaction It would be really nice if I could find out the particular locks that are causing this conflict --- but the code that emits these messages isn't very transparent :-(. Can anyone explain how to determine just what the deadlock is? regards, tom lane
> I've been experimenting with concurrent VACUUMs and getting occasional > instances of > > NOTICE: Deadlock detected -- See the lock(l) manual page for a possible cause. > ERROR: WaitOnLock: error on wakeup - Aborting this transaction > > It would be really nice if I could find out the particular locks that > are causing this conflict --- but the code that emits these messages > isn't very transparent :-(. Can anyone explain how to determine just > what the deadlock is? > Massimo has some. See the top of lock.c for pg_options flags to dump out locks. -- Bruce Momjian | http://www.op.net/~candle maillist@candle.pha.pa.us | (610) 853-3000+ If your life is a hard drive, | 830 Blythe Avenue + Christ can be your backup. | Drexel Hill, Pennsylvania19026
> > I've been experimenting with concurrent VACUUMs and getting occasional > > instances of > > > > NOTICE: Deadlock detected -- See the lock(l) manual page for a possible cause. > > ERROR: WaitOnLock: error on wakeup - Aborting this transaction > > > > It would be really nice if I could find out the particular locks that > > are causing this conflict --- but the code that emits these messages > > isn't very transparent :-(. Can anyone explain how to determine just > > what the deadlock is? > > > > Massimo has some. See the top of lock.c for pg_options flags to dump > out locks. Yes, there is a DumpAllLocks() which should dump the lock table in case of deadlock, but I have never been able to find any useful information from it. The code is non compiled by default unless you define DEADLOCK_DEBUG. -- Massimo Dal Zotto +----------------------------------------------------------------------+ | Massimo Dal Zotto email: dz@cs.unitn.it | | Via Marconi, 141 phone: ++39-0461534251 | | 38057 Pergine Valsugana (TN) www: http://www.cs.unitn.it/~dz/ | | Italy pgp: finger dz@tango.cs.unitn.it | +----------------------------------------------------------------------+
Well, you have a bit table that indicates what locks are already held and it's being AND'ed one indicating with the locks you hold. If they overlap, you're in trouble. Have you turned on LOCK_MGR_DEBUG? I'd print out the masks if the lock dump routine doesn't already. Tom Lane wrote: > > I've been experimenting with concurrent VACUUMs and getting occasional > instances of > > NOTICE: Deadlock detected -- See the lock(l) manual page for a possible cause. > ERROR: WaitOnLock: error on wakeup - Aborting this transaction > > It would be really nice if I could find out the particular locks that > are causing this conflict --- but the code that emits these messages > isn't very transparent :-(. Can anyone explain how to determine just > what the deadlock is? > > regards, tom lane > > ************