mirror of
https://github.com/postgres/postgres.git
synced 2025-09-02 04:21:28 +03:00
Remove the "snapshot too old" feature.
Remove the old_snapshot_threshold setting and mechanism for producing
the error "snapshot too old", originally added by commit 848ef42b
.
Unfortunately it had a number of known problems in terms of correctness
and performance, mostly reported by Andres in the course of his work on
snapshot scalability. We agreed to remove it, after a long period
without an active plan to fix it.
This is certainly a desirable feature, and someone might propose a new
or improved implementation in the future.
Reported-by: Andres Freund <andres@anarazel.de>
Discussion: https://postgr.es/m/CACG%3DezYV%2BEvO135fLRdVn-ZusfVsTY6cH1OZqWtezuEYH6ciQA%40mail.gmail.com
Discussion: https://postgr.es/m/20200401064008.qob7bfnnbu4w5cw4%40alap3.anarazel.de
Discussion: https://postgr.es/m/CA%2BTgmoY%3Daqf0zjTD%2B3dUWYkgMiNDegDLFjo%2B6ze%3DWtpik%2B3XqA%40mail.gmail.com
This commit is contained in:
@@ -2066,34 +2066,6 @@ GetMaxSnapshotSubxidCount(void)
|
||||
return TOTAL_MAX_CACHED_SUBXIDS;
|
||||
}
|
||||
|
||||
/*
|
||||
* Initialize old_snapshot_threshold specific parts of a newly build snapshot.
|
||||
*/
|
||||
static void
|
||||
GetSnapshotDataInitOldSnapshot(Snapshot snapshot)
|
||||
{
|
||||
if (!OldSnapshotThresholdActive())
|
||||
{
|
||||
/*
|
||||
* 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, snapshot->xmin);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Helper function for GetSnapshotData() that checks if the bulk of the
|
||||
* visibility information in the snapshot is still valid. If so, it updates
|
||||
@@ -2147,8 +2119,8 @@ GetSnapshotDataReuse(Snapshot snapshot)
|
||||
snapshot->active_count = 0;
|
||||
snapshot->regd_count = 0;
|
||||
snapshot->copied = false;
|
||||
|
||||
GetSnapshotDataInitOldSnapshot(snapshot);
|
||||
snapshot->lsn = InvalidXLogRecPtr;
|
||||
snapshot->whenTaken = 0;
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -2529,8 +2501,8 @@ GetSnapshotData(Snapshot snapshot)
|
||||
snapshot->active_count = 0;
|
||||
snapshot->regd_count = 0;
|
||||
snapshot->copied = false;
|
||||
|
||||
GetSnapshotDataInitOldSnapshot(snapshot);
|
||||
snapshot->lsn = InvalidXLogRecPtr;
|
||||
snapshot->whenTaken = 0;
|
||||
|
||||
return snapshot;
|
||||
}
|
||||
|
Reference in New Issue
Block a user