On 2016-05-25 17:24:22 -0400, Robert Haas wrote: > On Wed, May 25, 2016 at 3:26 PM, Andres Freund <and...@anarazel.de> wrote: > > On 2016-05-25 11:15:37 -0700, Andres Freund wrote: > >> On 2016-05-25 14:09:43 -0400, Robert Haas wrote: > >> I don't think anybody was doing that? The first questions on this thread > >> were about upgrading and retesting... > > > > Something I've repeatedly wondered about around this topic is whether we > > could split ProcArrayLock into one that governs entering or leaving the > > procarray from the one that's for consistent snapshots. I think there's > > no need for > > ProcArrayAdd/ProcArrayRemove/CountDBBackends()/CancelDBBackends()/ > > CountUserBackends()/CountOtherDBBackends() (and potentially some more) > > to conflict with GetSnapshotData()/ProcArrayEndTransaction()/ > > TransactionIdIsInProgress()/TransactionIdIsActive()/GetOldestXmin()/... > > as long as we're careful to ensure that by the time a entry is removed > > ProcArrayEndTransaction() has been called. > > I'm doubtful about how much that would reduce contention,
Yea, I don't think it'll usually will make a huge difference. It'd likely have solved this specific complaint though; and it'd remove nearly all other exclusive acquisitions of ProcArrayLock other than ProcArrayEndTransaction(). > However, I think it might be worth doing anyway, because redesigning > the whole mechanism might be easier if that lock weren't doing so many > only-semi-related things. Very much agreed upon this. Having a distinct 'SnapshotLock', for EndTransaction() and GetSnapshotData() would be a first step in making the locking more granular. Andres -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers