On Fri, 2007-10-26 at 10:32 +0100, Heikki Linnakangas wrote: > Alvaro Herrera wrote: > > /* > > * Look for a blocking autovacuum. There will only ever > > * be one, since the autovacuum workers are careful > > * not to operate concurrently on the same table. > > */ > > I think that's a bit unaccurate. You could have multiple autovacuum > workers operating on different tables participating in a deadlock. The > reason that can't happen is that autovacuum never holds a lock while > waiting for another.
I wrote that code comment; as you say it is true only when there are at least 4 processes in the lock graph where 2+ normal backends are deadlocking and there are 2+ autovacuums holding existing locks. The comment should have said "If blocking is caused by an autovacuum process then ... (there will)". The blocking_autovacuum_proc doesn't react unless there are no hard deadlocks, so the code works. -- Simon Riggs 2ndQuadrant http://www.2ndQuadrant.com ---------------------------(end of broadcast)--------------------------- TIP 5: don't forget to increase your free space map settings