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:
@@ -5575,20 +5575,3 @@ IssuePendingWritebacks(WritebackContext *wb_context, IOContext io_context)
|
||||
|
||||
wb_context->nr_pending = 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Implement slower/larger portions of TestForOldSnapshot
|
||||
*
|
||||
* Smaller/faster portions are put inline, but the entire set of logic is too
|
||||
* big for that.
|
||||
*/
|
||||
void
|
||||
TestForOldSnapshot_impl(Snapshot snapshot, Relation relation)
|
||||
{
|
||||
if (RelationAllowsEarlyPruning(relation)
|
||||
&& (snapshot)->whenTaken < GetOldSnapshotThresholdTimestamp())
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_SNAPSHOT_TOO_OLD),
|
||||
errmsg("snapshot too old")));
|
||||
}
|
||||
|
@@ -138,7 +138,6 @@ CalculateShmemSize(int *num_semaphores)
|
||||
size = add_size(size, WalRcvShmemSize());
|
||||
size = add_size(size, PgArchShmemSize());
|
||||
size = add_size(size, ApplyLauncherShmemSize());
|
||||
size = add_size(size, SnapMgrShmemSize());
|
||||
size = add_size(size, BTreeShmemSize());
|
||||
size = add_size(size, SyncScanShmemSize());
|
||||
size = add_size(size, AsyncShmemSize());
|
||||
@@ -298,7 +297,6 @@ CreateSharedMemoryAndSemaphores(void)
|
||||
/*
|
||||
* Set up other modules that need some shared memory space
|
||||
*/
|
||||
SnapMgrInit();
|
||||
BTreeShmemInit();
|
||||
SyncScanShmemInit();
|
||||
AsyncShmemInit();
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -47,7 +47,7 @@ CommitTsSLRULock 38
|
||||
CommitTsLock 39
|
||||
ReplicationOriginLock 40
|
||||
MultiXactTruncationLock 41
|
||||
OldSnapshotTimeMapLock 42
|
||||
# 42 was OldSnapshotTimeMapLock
|
||||
LogicalRepWorkerLock 43
|
||||
XactTruncationLock 44
|
||||
# 45 was XactTruncationLock until removal of BackendRandomLock
|
||||
|
Reference in New Issue
Block a user