Re: Reducing overhead of frequent table locks
Simon Riggs <simon@2ndquadrant.com>
From: Simon Riggs <simon@2ndQuadrant.com>
To: Robert Haas <robertmhaas@gmail.com>
Cc: Noah Misch <noah@leadboat.com>, Tom Lane <tgl@sss.pgh.pa.us>, Alexey Klyukin <alexk@commandprompt.com>, pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2011-05-25T12:56:37Z
Lists: pgsql-hackers
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Fix possible "tuple concurrently updated" error in ALTER TABLE.
- fbcf4b92aa64 9.1.0 cited
On Wed, May 25, 2011 at 1:44 PM, Robert Haas <robertmhaas@gmail.com> wrote: > On Wed, May 25, 2011 at 8:27 AM, Simon Riggs <simon@2ndquadrant.com> wrote: >> I got a bit lost with the description of a potential solution. It >> seemed like you were unaware that there is a local lock and a shared >> lock table, maybe just me? > > No, I'm not unaware of the local lock table. The point of this > proposal is to avoid fighting over the LWLocks that protect the shared > hash table by allowing some locks to be taken without touching it. Yes, I got that. I just couldn't work out where mmap came in. >> Design seemed relatively easy from there: put local lock table in >> shared memory for all procs. We then have a use_strong_lock at proc >> and at transaction level. Anybody that wants a strong lock first sets >> use_strong_lock at proc and transaction level, then copies all local >> lock data into shared lock table, double checking >> TransactionIdIsInProgress() each time. Then queues for lock using the >> now fully set up shared lock table. When transaction with strong lock >> completes we do not attempt to reset transaction level boolean, only >> at proc level, since DDL often occurs in groups and we want to avoid >> flip-flopping quickly between lock share states. Cleanup happens by >> regularly by bgwriter, perhaps every 10 seconds or so. All locks are >> still visible for pg_locks. > > I'm not following this... Which bit aren't you following? It's a design outline for how to implement, deliberately brief to allow a discussion of design alternatives. -- Simon Riggs http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training & Services