Skip site navigation (1) Skip section navigation (2)

Re: Avoiding unnecessary reads in recovery

From: Heikki Linnakangas <heikki(at)enterprisedb(dot)com>
To: Bruce Momjian <bruce(at)momjian(dot)us>
Cc: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, Simon Riggs <simon(at)2ndquadrant(dot)com>, PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Avoiding unnecessary reads in recovery
Date: 2007-04-28 10:22:59
Message-ID: 46332083.6090209@enterprisedb.com (view raw or flat)
Thread:
Lists: pgsql-hackers
I was actually thinking that we could slip this in 8.3. It's a simple, 
well-understood patch, which fixes a little data integrity quirk as well 
as gives a nice recovery speed up.

Bruce Momjian wrote:
> I assume this is 8.4 material.
> 
> ---------------------------------------------------------------------------
> 
> Heikki Linnakangas wrote:
>> Tom Lane wrote:
>>> "Simon Riggs" <simon(at)2ndquadrant(dot)com> writes:
>>>> As regards the zero_damaged_pages question, I raised that some time ago
>>>> but we didn't arrive at an explicit answer. All I would say is we can't
>>>> allow invalid pages in the buffer manager at any time, whatever options
>>>> we have requested, otherwise other code will fail almost immediately.
>>> Yeah --- the proposed new bufmgr routine should probably explicitly zero
>>> the content of the buffer.  It doesn't really matter in the context of
>>> WAL recovery, since there can't be any concurrent access to the buffer,
>>> but it'd make it safe to use in non-WAL contexts (I think there are
>>> other places where we know we are going to init the page and so a
>>> physical read is a waste of time).  
>> To implement that correctly, I think we'd need to take the content lock 
>> to clear the buffer if it's already found in the cache. It doesn't seem 
>> right to me for the buffer manager to do that, in the worst case it 
>> could lead to deadlocks if that function was ever used while holding 
>> another buffer locked.
>>
>> What we could have is the semantics of "Return a buffer, with either 
>> correct contents or completely zeroed out". It would act just like 
>> ReadBuffer if the buffer was already in memory, and zero out the page 
>> otherwise. That's a bit strange semantics to have, but is simple to 
>> implement and works for the use-cases we've been talking about.
>>
>> Patch implementing that attached. I named the function "ReadOrZeroBuffer".
>>
>> -- 
>>    Heikki Linnakangas
>>    EnterpriseDB   http://www.enterprisedb.com
> 
> 
>> ---------------------------(end of broadcast)---------------------------
>> TIP 6: explain analyze is your friend
> 


-- 
   Heikki Linnakangas
   EnterpriseDB   http://www.enterprisedb.com

In response to

Responses

pgsql-hackers by date

Next:From: Stefan KaltenbrunnerDate: 2007-04-28 12:44:34
Subject: Re: strange buildfarm failures
Previous:From: Heikki LinnakangasDate: 2007-04-28 10:20:52
Subject: Re: Avoiding unnecessary reads in recovery

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group