Re: hung backends stuck in spinlock heavy endless loop

Andres Freund <andres@2ndquadrant.com>

From: Andres Freund <andres@2ndquadrant.com>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Merlin Moncure <mmoncure@gmail.com>, Peter Geoghegan <pg@heroku.com>, PostgreSQL-development <pgsql-hackers@postgresql.org>
Date: 2015-01-14T15:17:29Z
Lists: pgsql-hackers
On 2015-01-14 10:13:32 -0500, Tom Lane wrote:
> Merlin Moncure <mmoncure@gmail.com> writes:
> > Yes, it is pg_class is coming from  LockBufferForCleanup ().  As you
> > can see above, it has a shorter runtime.   So it was killed off once
> > about a half hour ago which did not free up the logjam.  However, AV
> > spawned it again and now it does not respond to cancel.
> 
> Interesting.  That seems like there might be two separate issues at
> play.  It's plausible that LockBufferForCleanup might be interfering
> with other attempts to scan the index, but then why wouldn't killing
> the AV have unstuck things?

LockBufferForCleanup() unfortunately isn't interruptible. I've every now
and then seen vacuums being stuck for a long while, trying to acquire
cleanup locks - IIRC I complained about that on list even.  So autovac
will only be cancelled when going to the next page.  And even if the
page ever gets a zero (well, one) refcount, by the time autovac is woken
up via the semaphore, it'll often end up being used again.

Greetings,

Andres Freund

-- 
 Andres Freund	                   http://www.2ndQuadrant.com/
 PostgreSQL Development, 24x7 Support, Training & Services


Commits

  1. Improve hash_create's API for selecting simple-binary-key hash functions.

  2. Fix WAL-logging of B-tree "unlink halfdead page" operation.

  3. Fix backup-block numbering in redo of b-tree split.

  4. Cleanup of new b-tree page deletion code.

  5. Fix bug in the new B-tree incomplete-split code.

  6. Fix bug in new B-tree page deletion code.

  7. Fix rm_desc routine of b-tree page delete records.

  8. Make the handling of interrupted B-tree page splits more robust.

  9. Fix race condition in B-tree page deletion.