Re: HOT patch - version 15

From: "Heikki Linnakangas" <heikki(at)enterprisedb(dot)com>
To: "Bruce Momjian" <bruce(at)momjian(dot)us>
Cc: "Pavan Deolasee" <pavan(dot)deolasee(at)gmail(dot)com>, "Tom Lane" <tgl(at)sss(dot)pgh(dot)pa(dot)us>, "Florian Pflug" <fgp(dot)phlo(dot)org(at)gmail(dot)com>, "Simon Riggs" <simon(at)2ndquadrant(dot)com>, "Gregory Stark" <stark(at)enterprisedb(dot)com>, "PostgreSQL-patches" <pgsql-patches(at)postgresql(dot)org>
Subject: Re: HOT patch - version 15
Date: 2007-09-10 19:46:31
Message-ID: 46E59F17.4050408@enterprisedb.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-patches

Bruce Momjian wrote:
> Pavan Deolasee wrote:
>>>> Pruning does generate a WAL record at the moment. Maybe you could do
>>>> some kind of a quick pruning without a WAL record. Like just modify the
>>>> ctid of the oldest dead tuple in the chain, or the redirecting line
>>>> pointer if there is one, to point to the latest live tuple, without
>>>> removing the dead tuples or the line pointers.
>>> I am wondering what you even mean by removing the dead tuples when
>>> pruning. I thought only defragmentation removed tuples.
>>>
>>>
>> Pruning removes intermediate dead tuples by marking their line pointers
>> ~LP_USED and redirecting the root line pointer to the first
>> live/recently_dead
>> tuple in the chain. OTOH defragmentation moves tuples around to repair
>> fragmentation. IOW defragmentation is nothing but calling
>> PageRepairFragmentation on the page.
>>
>> For example, if we have a HOT chain of 5 tuples:
>>
>> 1 --> 2 --> 3 --> 4 --> 5
>>
>> of which, 1, 2 and 3 are DEAD, 4 is RECENTLY_DEAD and 5 is LIVE
>>
>> At the end of pruning:
>>
>> - line pointer of 1 is redirected to 4
>> - line pointers of 2 and 3 are marked ~LP_USED
>> - the offset of 4 and 5 is unchanged
>>
>> At the end of defragmentation:
>>
>> - 4 and 5 are moved to the end of the page to create a larger
>> contiguous free space in the page.
>
> Right. My point is that pruning only modifies item pointers. It does
> not change the actual heap tuples. In the quote above, how is Heikki's
> "quick pruning" different from the pruning you are describing?

In "quick pruning", you don't mark the line pointer as not used.
Otherwise someone might reuse the line pointer for another tuple, which
is a problem if you then crash. WAL replay would see an insert to a line
pointer that's already in use (the quick pruning wouldn't be WAL
logged), which would raise an error.

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

In response to

Responses

Browse pgsql-patches by date

  From Date Subject
Next Message Pavan Deolasee 2007-09-10 19:52:00 Re: HOT patch - version 15
Previous Message Bruce Momjian 2007-09-10 19:41:31 Re: HOT patch - version 15