mirror of
https://github.com/postgres/postgres.git
synced 2025-11-25 12:03:53 +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:
@@ -278,7 +278,6 @@ _bt_moveright(Relation rel,
|
||||
for (;;)
|
||||
{
|
||||
page = BufferGetPage(buf);
|
||||
TestForOldSnapshot(snapshot, rel, page);
|
||||
opaque = BTPageGetOpaque(page);
|
||||
|
||||
if (P_RIGHTMOST(opaque))
|
||||
@@ -2029,7 +2028,6 @@ _bt_readnextpage(IndexScanDesc scan, BlockNumber blkno, ScanDirection dir)
|
||||
/* step right one page */
|
||||
so->currPos.buf = _bt_getbuf(rel, blkno, BT_READ);
|
||||
page = BufferGetPage(so->currPos.buf);
|
||||
TestForOldSnapshot(scan->xs_snapshot, rel, page);
|
||||
opaque = BTPageGetOpaque(page);
|
||||
/* check for deleted page */
|
||||
if (!P_IGNORE(opaque))
|
||||
@@ -2132,7 +2130,6 @@ _bt_readnextpage(IndexScanDesc scan, BlockNumber blkno, ScanDirection dir)
|
||||
* and do it all again.
|
||||
*/
|
||||
page = BufferGetPage(so->currPos.buf);
|
||||
TestForOldSnapshot(scan->xs_snapshot, rel, page);
|
||||
opaque = BTPageGetOpaque(page);
|
||||
if (!P_IGNORE(opaque))
|
||||
{
|
||||
@@ -2238,7 +2235,6 @@ _bt_walk_left(Relation rel, Buffer buf, Snapshot snapshot)
|
||||
CHECK_FOR_INTERRUPTS();
|
||||
buf = _bt_getbuf(rel, blkno, BT_READ);
|
||||
page = BufferGetPage(buf);
|
||||
TestForOldSnapshot(snapshot, rel, page);
|
||||
opaque = BTPageGetOpaque(page);
|
||||
|
||||
/*
|
||||
@@ -2265,14 +2261,12 @@ _bt_walk_left(Relation rel, Buffer buf, Snapshot snapshot)
|
||||
blkno = opaque->btpo_next;
|
||||
buf = _bt_relandgetbuf(rel, buf, blkno, BT_READ);
|
||||
page = BufferGetPage(buf);
|
||||
TestForOldSnapshot(snapshot, rel, page);
|
||||
opaque = BTPageGetOpaque(page);
|
||||
}
|
||||
|
||||
/* Return to the original page to see what's up */
|
||||
buf = _bt_relandgetbuf(rel, buf, obknum, BT_READ);
|
||||
page = BufferGetPage(buf);
|
||||
TestForOldSnapshot(snapshot, rel, page);
|
||||
opaque = BTPageGetOpaque(page);
|
||||
if (P_ISDELETED(opaque))
|
||||
{
|
||||
@@ -2290,7 +2284,6 @@ _bt_walk_left(Relation rel, Buffer buf, Snapshot snapshot)
|
||||
blkno = opaque->btpo_next;
|
||||
buf = _bt_relandgetbuf(rel, buf, blkno, BT_READ);
|
||||
page = BufferGetPage(buf);
|
||||
TestForOldSnapshot(snapshot, rel, page);
|
||||
opaque = BTPageGetOpaque(page);
|
||||
if (!P_ISDELETED(opaque))
|
||||
break;
|
||||
@@ -2351,7 +2344,6 @@ _bt_get_endpoint(Relation rel, uint32 level, bool rightmost,
|
||||
return InvalidBuffer;
|
||||
|
||||
page = BufferGetPage(buf);
|
||||
TestForOldSnapshot(snapshot, rel, page);
|
||||
opaque = BTPageGetOpaque(page);
|
||||
|
||||
for (;;)
|
||||
@@ -2371,7 +2363,6 @@ _bt_get_endpoint(Relation rel, uint32 level, bool rightmost,
|
||||
RelationGetRelationName(rel));
|
||||
buf = _bt_relandgetbuf(rel, buf, blkno, BT_READ);
|
||||
page = BufferGetPage(buf);
|
||||
TestForOldSnapshot(snapshot, rel, page);
|
||||
opaque = BTPageGetOpaque(page);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user