Alvaro Herrera <alvherre@xxxxxxxxxxxxxx> writes: > However, I'm looking at the autovacuum code to see why it's sitting > holding locks on the small table and not vacuuming it. I see on the > pg_locks output that process 3158 (autovacuum) has got locks on the > table and index, but it apparently isn't vacuuming the table. If this > is correct, it's a bug. However I can't seem to find out why this > happens. We can see clearly from the pg_locks output that VACUUM isn't waiting for an lmgr lock, so the problem must be at a lower level. The hypothesis I'm thinking about is that VACUUM is trying to do LockBufferForCleanup() and for some reason it never finishes. There are a number of possible scenarios that could explain this: leaked buffer pin, dropped signal, etc. > Kevin, Jeff, next time this happens please attach gdb to the autovacuum > process and get a stack trace ("bt" to gdb), if at all possible, and/or > strace it to see what it's doing. Please! Also, we need to keep a little clarity about what we are dealing with. This thread has mentioned hangups in both plain vacuum (autovacuum) and VACUUM FULL. It seems very likely to me that there are different mechanisms involved --- since VACUUM FULL takes an exclusive lock on the whole table, that eliminates an entire class of possible explanations for the plain-VACUUM case, while introducing a whole new set of explanations having to do with the VACUUM being queued up behind ordinary table locks. Please be perfectly clear about which scenario each report is about. Finally, I'm wondering whether this bug is new in 8.1 or is pre-existing. Has this same application been running successfully in 8.0? regards, tom lane ---------------------------(end of broadcast)--------------------------- TIP 2: Don't 'kill -9' the postmaster