mirror of
https://github.com/postgres/postgres.git
synced 2025-08-19 23:22:23 +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:
@@ -71,7 +71,6 @@ _hash_next(IndexScanDesc scan, ScanDirection dir)
|
||||
if (BlockNumberIsValid(blkno))
|
||||
{
|
||||
buf = _hash_getbuf(rel, blkno, HASH_READ, LH_OVERFLOW_PAGE);
|
||||
TestForOldSnapshot(scan->xs_snapshot, rel, BufferGetPage(buf));
|
||||
if (!_hash_readpage(scan, &buf, dir))
|
||||
end_of_scan = true;
|
||||
}
|
||||
@@ -91,7 +90,6 @@ _hash_next(IndexScanDesc scan, ScanDirection dir)
|
||||
{
|
||||
buf = _hash_getbuf(rel, blkno, HASH_READ,
|
||||
LH_BUCKET_PAGE | LH_OVERFLOW_PAGE);
|
||||
TestForOldSnapshot(scan->xs_snapshot, rel, BufferGetPage(buf));
|
||||
|
||||
/*
|
||||
* We always maintain the pin on bucket page for whole scan
|
||||
@@ -186,7 +184,6 @@ _hash_readnext(IndexScanDesc scan,
|
||||
if (block_found)
|
||||
{
|
||||
*pagep = BufferGetPage(*bufp);
|
||||
TestForOldSnapshot(scan->xs_snapshot, rel, *pagep);
|
||||
*opaquep = HashPageGetOpaque(*pagep);
|
||||
}
|
||||
}
|
||||
@@ -232,7 +229,6 @@ _hash_readprev(IndexScanDesc scan,
|
||||
*bufp = _hash_getbuf(rel, blkno, HASH_READ,
|
||||
LH_BUCKET_PAGE | LH_OVERFLOW_PAGE);
|
||||
*pagep = BufferGetPage(*bufp);
|
||||
TestForOldSnapshot(scan->xs_snapshot, rel, *pagep);
|
||||
*opaquep = HashPageGetOpaque(*pagep);
|
||||
|
||||
/*
|
||||
@@ -351,7 +347,6 @@ _hash_first(IndexScanDesc scan, ScanDirection dir)
|
||||
buf = _hash_getbucketbuf_from_hashkey(rel, hashkey, HASH_READ, NULL);
|
||||
PredicateLockPage(rel, BufferGetBlockNumber(buf), scan->xs_snapshot);
|
||||
page = BufferGetPage(buf);
|
||||
TestForOldSnapshot(scan->xs_snapshot, rel, page);
|
||||
opaque = HashPageGetOpaque(page);
|
||||
bucket = opaque->hasho_bucket;
|
||||
|
||||
@@ -387,7 +382,6 @@ _hash_first(IndexScanDesc scan, ScanDirection dir)
|
||||
LockBuffer(buf, BUFFER_LOCK_UNLOCK);
|
||||
|
||||
old_buf = _hash_getbuf(rel, old_blkno, HASH_READ, LH_BUCKET_PAGE);
|
||||
TestForOldSnapshot(scan->xs_snapshot, rel, BufferGetPage(old_buf));
|
||||
|
||||
/*
|
||||
* remember the split bucket buffer so as to use it later for
|
||||
|
Reference in New Issue
Block a user