Re: [PATCHES] COPY with no WAL, in certain circumstances - Mailing list pgsql-hackers

From Simon Riggs
Subject Re: [PATCHES] COPY with no WAL, in certain circumstances
Date
Msg-id 1168441779.3951.369.camel@silverbirch.site
Whole thread Raw
In response to Re: [PATCHES] COPY with no WAL, in certain circumstances  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: [PATCHES] COPY with no WAL, in certain circumstances  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-hackers
On Tue, 2007-01-09 at 16:31 -0500, Tom Lane wrote:
> "Simon Riggs" <simon@2ndquadrant.com> writes:
> > ...continuing this discussion about setting HEAP_XMIN_COMMITTED...
> 
> >> BTW, a sufficient counterexample for that kluge is that neither SPI or
> >> SQL-function execution use a separate portal for invoked commands.
> 
> > What would the best/acceptable way be to test for this condition?
> 
> My opinion is that the only reliable answer would be to find a way not
> to have to test.  Tuples entered by your own transaction are normally
> considered good by tqual.c anyway, and thus I think we might be pretty
> close to having it Just Work, but you'd have to go through all the cases
> in tqual.c and see if any don't work.

I agree we could get this to Just Work by altering
HeapTupleSatisfies...() functions so that their first test is
if (TransactionIdIsCurrentTransactionId(xvac))

rather then
if (!(tuple->t_infomask & HEAP_XMIN_COMMITTED))

I had ruled that out, unconsciously prefering the localised check in
COPY, but I agree that the test was too complex.

Taking this direct approach does have a lot of promise: Looks like
HeapTupleSatisfiesSnapshot() currently does 4 if tests to check that an
undeleted row is visible, and all other paths do much more work.
Increasing the number of checks to 5 might not hurt that much. The
branch prediction would work well for it, since when you are the
CurrentTransactionId the test would pass 100% and when you're not the
branch would fail 100% of the time, so the CPU would react to it
positively I think.

I'll run some tests and see if there's a noticeable difference.

> The other point is that to make such an optimization you have to
> consider the subtransaction history.  For WAL you only have to know that
> the table will disappear if the top-level transaction fails, but to
> pre-set commit bits requires being sure that the table will disappear
> if the current subxact fails --- not the same thing at all.

Right, you reminded me of that on the other part of the thread.

It seems straightforward to put a test into COPY that the optimization
will only work if you're in the Xid that made the relfilenode change. 

--  Simon Riggs              EnterpriseDB   http://www.enterprisedb.com




pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: Re: Mark/Restore and avoiding RandomAccess sorts
Next
From: Zdenek Kotala
Date:
Subject: Re: ECPG regression test failures on Solaris 10/x86_64 with