Re: BUG #9757: Why reclaim index deleted pages need twice vacuum - Mailing list pgsql-bugs

From Heikki Linnakangas
Subject Re: BUG #9757: Why reclaim index deleted pages need twice vacuum
Date
Msg-id 5339113D.8020202@vmware.com
Whole thread Raw
In response to BUG #9757: Why reclaim index deleted pages need twice vacuum  (digoal@126.com)
List pgsql-bugs
On 03/28/2014 10:15 AM, digoal@126.com wrote:
> The following bug has been logged on the website:
>
> Bug reference:      9757
> Logged by:          digoal.zhou
> Email address:      digoal@126.com
> PostgreSQL version: 9.3.3
> Operating system:   CentOS 6.4 x64
> Description:
>
> When I'm testing a index page recycling, found that the index page must be
> two vacuum can be reused.

Yep, that's how the b-tree works [1]. A deleted page cannot be
immediately reused, because there might be concurrent scans that are
just about to visit the page. So when a page is deleted, i.e unlinked
from the tree, it is stamped with the next transaction ID, and left in
place. The next vacuum checks that the transaction ID is no longer
visible to anyone, which ensures that there are no transactions running
that might've seen a reference to that page. Only after that the page
can be reused.

That's quite pessimal; in most cases the page could be reused much
earlier, because it is a very tight window for vacuum to delete a page
just when a concurrent scan has read a link to the page and is about to
follow it. But B-tree pages are usually not deleted that often that it
would matter in practice, so there has been no effort to optimize it.

In short, it's not a bug :-).

[1]
http://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/backend/access/nbtree/README#l283

- Heikki

pgsql-bugs by date:

Previous
From: Craig Ringer
Date:
Subject: Re: Re: BUG #9611: Current jdbc driver doesn't support any classes in Java 8 java.time
Next
From: larry.price@enterprisedb.com
Date:
Subject: BUG #9776: well formed json with embedd colon ':' causes error on copy