On 9/11/07, Bruce Momjian <bruce@momjian.us > wrote: Heikki Linnakangas 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.
Thanks,
Pavan
--
Pavan Deolasee
EnterpriseDB
http://www.enterprisedb.com