> 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.
This sort of incorporates the "vacuum row" I suggested. > > 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. > This is great! ---------------------------(end of broadcast)--------------------------- TIP 6: explain analyze is your friend