Re: SSI heap_insert and page-level predicate locks - Mailing list pgsql-hackers

From Jeff Davis
Subject Re: SSI heap_insert and page-level predicate locks
Date
Msg-id 1312163343.29391.101.camel@jdavis
Whole thread Raw
In response to Re: SSI heap_insert and page-level predicate locks  ("Kevin Grittner" <Kevin.Grittner@wicourts.gov>)
Responses Re: SSI heap_insert and page-level predicate locks
List pgsql-hackers
On Wed, 2011-06-08 at 17:29 -0500, Kevin Grittner wrote:
> Heikki Linnakangas <heikki.linnakangas@enterprisedb.com> wrote:
> > heap_insert() calls CheckForSerializableConflictIn(), which checks if
> > there is a predicate lock on the whole relation, or on the page we're
> > inserting to. It does not check for tuple-level locks, because there
> > can't be any locks on a tuple that didn't exist before.
> > AFAICS, the check for page lock is actually unnecessary. A page-level
> > lock on a heap only occurs when tuple-level locks are promoted. It is
> > just a coarser-grain representation of holding locks on all tuples on
> > the page, *that exist already*. It is not a "gap" lock like the index
> > locks are, it doesn't need to conflict with inserting new tuples on
> the 
> > page. In fact, if heap_insert chose to insert the tuple on some other
> > heap page, there would have been no conflict.
>  
> Absolutely correct.  Patch attached.

I like the change, but the comment is slightly confusing. Perhaps
something like:

"For a heap insert, we only need to check for table locks. Our new tuple
can't possibly conflict with existing tuple locks, and heap page locks
are only consolidated versions of tuple locks. The index insert will
check for any other predicate locks."

would be a little more clear? (the last sentence is optional, and I only
included it because the original comment mentioned indexes).

Same for heap_update().

Regards,Jeff Davis







pgsql-hackers by date:

Previous
From: Jeff Davis
Date:
Subject: Re: lazy vxid locks, v3
Next
From: daveg
Date:
Subject: Re: error: could not find pg_class tuple for index 2662