Alvaro Herrera <[EMAIL PROTECTED]> writes: > Patch attached, please comment. It only avoids cancelling when the > vacuum is for wraparound.
I'm not entirely convinced that there can be only one autovac proc in the portion of the waits-for graph explored by DeadlockCheck. If there is more than one, we'll cancel a random one of them, which seems OK --- but the comment added to FindLockCycleRecurse is bogus. I thought about suggesting that we test PROC_VACUUM_FOR_WRAPAROUND before setting blocking_autovacuum_proc at all, but I guess the reason you don't do that is you don't want to take ProcArrayLock there (and we decided it was unsafe to check the bit without the lock). So the other thing that comment block needs is a note that it seems OK to check PROC_IS_AUTOVACUUM without the lock, because it never changes for an existing PGPROC, but not PROC_VACUUM_FOR_WRAPAROUND. Otherwise it looks OK --- a bit ugly but I don't have a better idea. There's some things still to be desired here: if an autovac process is involved in a hard deadlock, the patch doesn't favor zapping it over anybody else, nor consider cancelling the autovac as an alternative to rearranging queues for a soft deadlock. But dealing with that will open cans of worms that I don't think we want to open for 8.3. regards, tom lane ---------------------------(end of broadcast)--------------------------- TIP 9: In versions below 8.0, the planner will ignore your desire to choose an index scan if your joining column's datatypes do not match