On 23 December 2012 19:42, Greg Smith <g...@2ndquadrant.com> wrote:

> diff --git a/src/backend/storage/buffer/bufmgr.c
> b/src/backend/storage/buffer/bufmgr.c
> index dddb6c0..df43643 100644
> --- a/src/backend/storage/buffer/bufmgr.c
> +++ b/src/backend/storage/buffer/bufmgr.c
> @@ -1697,11 +1697,21 @@ AtEOXact_Buffers(bool isCommit)
>         if (assert_enabled)
>         {
>                 int                     i;
> +               int                     RefCountErrors = 0;
>
>
>                 for (i = 0; i < NBuffers; i++)
>                 {
> -                       Assert(PrivateRefCount[i] == 0);
> +
> +                       if (PrivateRefCount[i] != 0)
> +                       {
> +                               BufferDesc *bufHdr = &BufferDescriptors[i];
> +                               elog(LOG, "refcount of %s is %u should be 0,
> globally: %u",
>
> +                                    relpathbackend(bufHdr->tag.rnode,
> InvalidBackendId, bufHdr->tag.forkNum),
> +                                    PrivateRefCount[i], bufHdr->refcount);
> +                               RefCountErrors++;
> +                       }
>                 }
> +               Assert(RefCountErrors == 0);
>         }
>  #endif
>

We already have PrintBufferLeakWarning() for this, which might be a bit neater.

If that last change was the cause, then its caused within VACUUM. I'm
running a thrash test with autovacuums set much more frequently but
nothing yet.

Are you by any chance running with unlogged tables? There was a change
there recently, something around checkpoint IIRC. Can you set
checkpoints more frequent also?

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


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to