From: | Heikki Linnakangas <heikki(dot)linnakangas(at)enterprisedb(dot)com> |
---|---|
To: | Andres Freund <andres(at)2ndquadrant(dot)com> |
Cc: | pgsql-hackers(at)postgresql(dot)org, Robert Haas <robertmhaas(at)gmail(dot)com> |
Subject: | Re: WAL format changes |
Date: | 2012-06-18 19:19:48 |
Message-ID: | 4FDF7F54.5060406@enterprisedb.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On 18.06.2012 21:45, Andres Freund wrote:
> On Monday, June 18, 2012 08:32:54 PM Heikki Linnakangas wrote:
>> On 18.06.2012 21:13, Andres Freund wrote:
>>> On Monday, June 18, 2012 08:08:14 PM Heikki Linnakangas wrote:
>>>> The page header contains an XLogRecPtr (LSN), so if we change it we'll
>>>> have to deal with pg_upgrade. I guess we could still keep XLogRecPtr
>>>> around as the on-disk representation, and convert between the 64-bit
>>>> integer and XLogRecPtr in PageGetLSN/PageSetLSN. I can try that out -
>>>> many xlog calculations would admittedly be simpler if it was an uint64.
>>>
>>> I am out of my depth here, not having read any of the relevant code, but
>>> couldn't we simply replace the lsn from disk with InvalidXLogRecPtr
>>> without marking the page dirty?
>>>
>>> There is the valid argument that you would loose some information when
>>> pages with hint bits are written out again, but on the other hand you
>>> would also gain the information that it was a hint-bit write...
>>
>> Sorry, I don't understand that. Where would you "replace the LSN from
>> disk with InvalidXLogRecPtr" ? (and no, it probably won't work ;-) )
> In ReadBuffer_common or such, after reading a page from disk and verifying
> that the page has a valid header it seems to be possible to replace pd_lsn *in
> memory* by InvalidXLogRecPtr without marking the page dirty.
> If the page isn't modified the lsn on disk won't be changed so you don't loose
> debugging information in that case. If will be zero if it has been written by
> a hint-bit write and thats arguable a win.
We use the LSN to decide whether a full-page image need to be xlogged if
the page is modified. If you reset LSN every time you read in a page,
you'll be doing full page writes every time a page is read from disk and
modified, whether or not it's the first time the page is modified after
the last checkpoint.
--
Heikki Linnakangas
EnterpriseDB http://www.enterprisedb.com
From | Date | Subject | |
---|---|---|---|
Next Message | Amit Kapila | 2012-06-18 19:29:03 | [Review] Add SPI_gettypmod() to return a field's typemod from a TupleDesc |
Previous Message | Andres Freund | 2012-06-18 18:57:51 | Re: initdb and fsync |