I think double buffering solves the torn page problem but not the lack of wal logging. Alvarro solved the wal logging by deferring the wal logs. But I'm not sure how confident we are that it's logging enough.

I'm beginning to think just excluding the hint bits would be simpler and safer. If we're double buffering then it might be possible to do that pretty cheaply. Copy the whole buffer with memcpy then loop through the line pointers unsetting the hint bits. Then do the crc. Though that would prevent us from doing "zero-copy" crc by doing it in the copy.

greg

On 9 Nov 2008, at 04:02 PM, Tom Lane <[EMAIL PROTECTED]> wrote:

Martijn van Oosterhout <[EMAIL PROTECTED]> writes:
There is another option I havn't seen mentioned anywhere yet: a single
bit change in a page has a predictable change on the CRC, dependant
only on the position of the bit. So in theory it would be possible for
the process changing the hint bit to update the CRC with a single XOR
operation. Working out what to XOR it with is the hard part.

Although, maybe locking of the hint bits would be a problem?

Yes it would :-(. Also, this scheme would point us towards maintaining
the CRCs *continually* while the page is in memory, rather than only
recalculating them upon write.  So every tuple insert/update/delete
would require a recalculation of the entire page CRC.

What happened to the plan to double-buffer the writes to avoid this
issue?

           regards, tom lane

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

--
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