• Robert Haas's avatar
    Reduce ProcArrayLock contention by removing backends in batches. · 0e141c0f
    Robert Haas authored
    When a write transaction commits, it must clear its XID advertised via
    the ProcArray, which requires that we hold ProcArrayLock in exclusive
    mode in order to prevent concurrent processes running GetSnapshotData
    from seeing inconsistent results.  When many processes try to commit
    at once, ProcArrayLock must change hands repeatedly, with each
    concurrent process trying to commit waking up to acquire the lock in
    turn.  To make things more efficient, when more than one backend is
    trying to commit a write transaction at the same time, have just one
    of them acquire ProcArrayLock in exclusive mode and clear the XIDs of
    all processes in the group.  Benchmarking reveals that this is much
    more efficient at very high client counts.
    
    Amit Kapila, heavily revised by me, with some review also from Pavan
    Deolasee.
    0e141c0f
proc.c 50 KB