postgres.git / summary / log / commit / refs

commit    2201d801b03c2d1b0bce4d6580b718dc34d38b3e
Author:   Kevin Grittner <kgrittn@postgresql.org>
Date:     Tue Apr 12 16:48:02 2016 +0000

    Avoid extra locks in GetSnapshotData if old_snapshot_threshold < 0
    
    On a big NUMA machine with 1000 connections in saturation load
    there was a performance regression due to spinlock contention, for
    acquiring values which were never used.  Just fill with dummy
    values if we're not going to use them.
    
    This patch has not been benchmarked yet on a big NUMA machine, but
    it seems like a good idea on general principle, and it seemed to
    prevent an apparent 2.2% regression on a single-socket i7 box
    running 200 connections at saturation load.


src/backend/storage/ipc/procarray.c | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/src/backend/storage/ipc/procarray.c b/src/backend/storage/ipc/procarray.c index 5bc9fd6595e..193035ec262 100644 --- a/src/backend/storage/ipc/procarray.c +++ b/src/backend/storage/ipc/procarray.c @@ -1759,14 +1759,26 @@ GetSnapshotData(Snapshot snapshot) snapshot->regd_count = 0; snapshot->copied = false; - /* - * Capture the current time and WAL stream location in case this snapshot - * becomes old enough to need to fall back on the special "old snapshot" - * logic. - */ - snapshot->lsn = GetXLogInsertRecPtr(); - snapshot->whenTaken = GetSnapshotCurrentTimestamp(); - MaintainOldSnapshotTimeMapping(snapshot->whenTaken, xmin); + if (old_snapshot_threshold < 0) + { + /* + * If not using "snapshot too old" feature, fill related fields with + * dummy values that don't require any locking. + */ + snapshot->lsn = InvalidXLogRecPtr; + snapshot->whenTaken = 0; + } + else + { + /* + * Capture the current time and WAL stream location in case this + * snapshot becomes old enough to need to fall back on the special + * "old snapshot" logic. + */ + snapshot->lsn = GetXLogInsertRecPtr(); + snapshot->whenTaken = GetSnapshotCurrentTimestamp(); + MaintainOldSnapshotTimeMapping(snapshot->whenTaken, xmin); + } return snapshot; } [parent: 5713f03973e2]