diff options
author | Thomas Munro <tmunro@postgresql.org> | 2023-09-05 18:26:12 +1200 |
---|---|---|
committer | Thomas Munro <tmunro@postgresql.org> | 2023-09-05 19:53:43 +1200 |
commit | f691f5b80a85c66d715b4340ffabb503eb19393e (patch) | |
tree | 26a06c87096de2f9571956b4370ccbf1852d4cba /src/backend/storage/ipc | |
parent | aa0d3504560d40f4300a3d49d1c6c3bfc3b894e5 (diff) |
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
Diffstat (limited to 'src/backend/storage/ipc')
-rw-r--r-- | src/backend/storage/ipc/ipci.c | 2 | ||||
-rw-r--r-- | src/backend/storage/ipc/procarray.c | 36 |
2 files changed, 4 insertions, 34 deletions
diff --git a/src/backend/storage/ipc/ipci.c b/src/backend/storage/ipc/ipci.c index 5551afffc04..a3d8eacb8dc 100644 --- a/src/backend/storage/ipc/ipci.c +++ b/src/backend/storage/ipc/ipci.c @@ -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(); diff --git a/src/backend/storage/ipc/procarray.c b/src/backend/storage/ipc/procarray.c index 2a3da49b8fc..aa1552e0316 100644 --- a/src/backend/storage/ipc/procarray.c +++ b/src/backend/storage/ipc/procarray.c @@ -2067,34 +2067,6 @@ GetMaxSnapshotSubxidCount(void) } /* - * 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 * the fields that need to change and returns true. Otherwise it returns @@ -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; } |