Re: vacuum, performance, and MVCC - Mailing list pgsql-hackers

From Bruce Momjian
Subject Re: vacuum, performance, and MVCC
Date
Msg-id 200606261117.k5QBHVT02863@momjian.us
Whole thread Raw
In response to Re: vacuum, performance, and MVCC  (Heikki Linnakangas <hlinnaka@iki.fi>)
Responses Re: vacuum, performance, and MVCC
Re: vacuum, performance, and MVCC
List pgsql-hackers
Heikki Linnakangas wrote:
> On Mon, 26 Jun 2006, Jan Wieck wrote:
> 
> > On 6/25/2006 10:12 PM, Bruce Momjian wrote:
> >> When you are using the update chaining, you can't mark that index row as
> >> dead because it actually points to more than one row on the page, some
> >> are non-visible, some are visible.
> >
> > Back up the truck ... you mean in the current code base we have heap tuples 
> > that are visible in index scans because of heap tuple chaining but without 
> > index tuples pointing directly at them?
> 
> In current code, no. Every heap tuple has corresponding index tuples.
> 
> In Bruce's proposal, yes. You would have heap tuples without index tuples 
> pointing directly at them. An index scan could only find them by following 
> t_ctid chains.
> 
> Correct me if I understood you incorrectly, Bruce.

Correct!  We use the same pointers used by normal UPDATEs, except we set
a bit on the old tuple indicating it is a single-index tuple, and we
don't create index entries for the new tuple.  Index scan routines will
need to be taught about the new chains, but because only one tuple in
the chain is visible to a single backend, the callers should not need to
be modified.

(All tuples in the chain have page item ids.  It is just that when they
are freed, the pointers are adjusted so the index points to the chain
head.)

One problem is that once you find the row you want to update, it is
difficult to see if it is part of a single-index chain because there are
only forward pointers, so I think we have to scan the entire page to
find the chains.  To reduce that overhead, I am thinking we free the
non-visible tuples only when the page has no more free space.  This
allows us to free not just our own non-visible tuples, but perhaps
others as well.

We have never been able to free non-visible tuples before because of
index cleanup overhead, but with single-index chains, we can, and reduce
the requirements of vacuum for many workloads.

--  Bruce Momjian   bruce@momjian.us EnterpriseDB    http://www.enterprisedb.com
 + If your life is a hard drive, Christ can be your backup. +


pgsql-hackers by date:

Previous
From: Bruce Momjian
Date:
Subject: Re: vacuum, performance, and MVCC
Next
From: "Mark Woodward"
Date:
Subject: Re: vacuum, performance, and MVCC