On Wed, Jun 08, 2011 at 05:48:26PM -0500, Kevin Grittner wrote:
> (1) Pass snapshot in to some predicate.c functions. The particular
> functions have yet to be determined, but certainly any which acquire
> predicate locks, and probably all which are guarded by the
> SkipSerialization() macro. Skip processing for non-MVCC snapshots.
> The goal here is to reduce false positive serialization failures and
> avoid confusion about locks showing in the pg_locks view which are
> hard to explain.
I assume you've already started on this one; let me know if you have a
patch I should take a look at or hit any snags.
> (2) Check on heap truncation from vacuum. On the face of it this
> seems unlikely to be a problem since we make every effort to clean
> up predicate locks as soon as there is no transaction which can
> update what a transaction has read, but it merits a re-check. Once
> confirmed, add a note to lazy_truncate_heap about why it's not an
> issue.
I assume you are worried here that there may be SIREAD locks remaining
on truncated pages/tuples, and these would cause false positives if
those pages are reused?
I don't believe this can happen, because a vacuum will only delete a
formerly-visible dead tuple if its xmax is earlier than OldestXmin. We
remove all SIREAD locks on anything older than GlobalSxactXmin, which
won't be less than OldestXmin.
> (4) Add a comment to the docs about how querying tuples by TID
> doesn't lock not-found "gaps" the way an indexed access would.
I can take care of this one and some other README-SSI changes.
Dan
--
Dan R. K. Ports MIT CSAIL http://drkp.net/