Re: Behavior of shared/exclusive row locks

From: Alvaro Herrera <alvherre(at)dcc(dot)uchile(dot)cl>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: pgsql-hackers(at)postgresql(dot)org
Subject: Re: Behavior of shared/exclusive row locks
Date: 2005-04-27 22:14:15
Message-ID: 20050427221415.GB8500@dcc.uchile.cl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Wed, Apr 27, 2005 at 05:51:47PM -0400, Tom Lane wrote:

> Suppose that we redo the LOCKTAGs per previous discussion (which I would
> like to do anyway), so that it is possible to define an lmgr lock on a
> particular tuple.

Hm. If you want I can give you the part of the patch that dealt with
changing LOCKTAG. It's not a big deal but it might save you some
effort. (On the other hand, if you want to do a wholesale revamp of
LOCKTAG, it will only slow you down.)

> The objection to this was that there could be too
> many locks held for lmgr to cope, but your idea above shows the way out.
> Once a backend realizes that it's got to wait for a tuple, it releases
> the page context lock and then gets the lmgr lock representing the
> target tuple, with either a shared or exclusive lock mode as
> appropriate. After it gets that, it waits on the current tuple holder
> as in your patch. After it gets that, it updates the tuple state as
> needed, and only then releases the lmgr lock.
>
> A backend that thinks it can join an existing shared locker also has to
> get the lmgr lock in the same way, so that it will block if there is
> a pending exclusive locker.

Sounds like an excellent plan to me.

--
Alvaro Herrera (<alvherre[(at)]dcc(dot)uchile(dot)cl>)
Essentially, you're proposing Kevlar shoes as a solution for the problem
that you want to walk around carrying a loaded gun aimed at your foot.
(Tom Lane)

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Hannu Krosing 2005-04-27 22:22:55 Re: Tablepartitioning: Will it be supported in Future?
Previous Message Tom Lane 2005-04-27 21:51:47 Re: Behavior of shared/exclusive row locks