mirror of
https://github.com/postgres/postgres.git
synced 2025-04-21 12:05:57 +03:00
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.
This commit is contained in:
parent
5713f03973
commit
2201d801b0
@ -1759,14 +1759,26 @@ GetSnapshotData(Snapshot snapshot)
|
|||||||
snapshot->regd_count = 0;
|
snapshot->regd_count = 0;
|
||||||
snapshot->copied = false;
|
snapshot->copied = false;
|
||||||
|
|
||||||
|
if (old_snapshot_threshold < 0)
|
||||||
|
{
|
||||||
/*
|
/*
|
||||||
* Capture the current time and WAL stream location in case this snapshot
|
* If not using "snapshot too old" feature, fill related fields with
|
||||||
* becomes old enough to need to fall back on the special "old snapshot"
|
* dummy values that don't require any locking.
|
||||||
* logic.
|
*/
|
||||||
|
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->lsn = GetXLogInsertRecPtr();
|
||||||
snapshot->whenTaken = GetSnapshotCurrentTimestamp();
|
snapshot->whenTaken = GetSnapshotCurrentTimestamp();
|
||||||
MaintainOldSnapshotTimeMapping(snapshot->whenTaken, xmin);
|
MaintainOldSnapshotTimeMapping(snapshot->whenTaken, xmin);
|
||||||
|
}
|
||||||
|
|
||||||
return snapshot;
|
return snapshot;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user