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

From Tom Lane
Subject Re: [PATCHES] COPY with no WAL, in certain circumstances
Date
Msg-id 7470.1168443476@sss.pgh.pa.us
Whole thread Raw
In response to Re: [PATCHES] COPY with no WAL, in certain circumstances  ("Simon Riggs" <simon@2ndquadrant.com>)
Responses Re: [PATCHES] COPY with no WAL, in certain circumstances  ("Simon Riggs" <simon@2ndquadrant.com>)
List pgsql-hackers
"Simon Riggs" <simon@2ndquadrant.com> writes:
> 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))

Huh?  That doesn't make any sense at all.  xvac wouldn't normally be
valid.

I don't want to put TransactionIdIsCurrentTransactionId into the main
path of the tqual routines if at all possible; it's not an especially
cheap test, particularly if deeply nested in subtransactions.  My
thought was that for SatisfiesSnapshot, you'd fall through the first
big chunk if XMIN_COMMITTED is set and then fail the XidInSnapshot test.
Then a TransactionIdIsCurrentTransactionId test could be added in that
fairly-unusual failure path, where it wouldn't slow the main path of
control.  Something like
   if (XidInSnapshot(HeapTupleHeaderGetXmin(tuple), snapshot))   {       if
(TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetXmin(tuple)))      {           if (HeapTupleHeaderGetCmin(tuple)
>=snapshot->curcid)               return false;    /* inserted after scan started */       }       else
returnfalse;            /* treat as still in progress */   }
 

This would require rejiggering snapshots to include our own xid, see
comment for XidInSnapshot.  That would add some distributed cost to
executions of XidInSnapshot for recently-committed tuples, but it would
avoid adding any cycles to the path taken for tuples committed before
the xmin horizon, which is the normal case that has to be kept fast.

Haven't looked at whether an equivalent hack is possible for the other
tqual routines.
           regards, tom lane


pgsql-hackers by date:

Previous
From: "Simon Riggs"
Date:
Subject: Re: Mark/Restore and avoiding RandomAccess sorts
Next
From: Tom Lane
Date:
Subject: Re: Mark/Restore and avoiding RandomAccess sorts