v60-0014-Removed-the-management-of-repairing-fragmentatio.patch
text/x-patch
Filename: v60-0014-Removed-the-management-of-repairing-fragmentatio.patch
Type: text/x-patch
Part: 13
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: format-patch
Series: patch v60-0014
Subject: Removed the management of repairing fragmentation during a prune-freeze operarion. Fixed the bug of the XMAX_COMMITTED hint bit.
| File | + | − |
|---|---|---|
| src/backend/access/heap/heapam.c | 1 | 1 |
| src/backend/access/heap/heapam_xlog.c | 0 | 1 |
| src/backend/access/heap/pruneheap.c | 5 | 14 |
| src/backend/access/heap/vacuumlazy.c | 2 | 4 |
| src/include/access/heapam.h | 2 | 5 |
From b353c4c26610e2fcdb5261de19b899dd082301fc Mon Sep 17 00:00:00 2001
From: Evgeny Voropaev <evorop@gmail.com>
Date: Thu, 30 Jan 2025 15:22:52 +0800
Subject: [PATCH v60 14/15] Removed the management of repairing fragmentation
during a prune-freeze operarion. Fixed the bug of the XMAX_COMMITTED hint
bit.
Author: Evgeny Voropaev <evgeny.voropaev@tantorlabs.com> <evorop@gmail.com>
Author: Sergey Solovev <sergey.soloviev@tantorlabs.com>
---
src/backend/access/heap/heapam.c | 2 +-
src/backend/access/heap/heapam_xlog.c | 1 -
src/backend/access/heap/pruneheap.c | 19 +++++--------------
src/backend/access/heap/vacuumlazy.c | 6 ++----
src/include/access/heapam.h | 7 ++-----
5 files changed, 10 insertions(+), 25 deletions(-)
diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c
index 6ac653833fa..93b6384b4a5 100644
--- a/src/backend/access/heap/heapam.c
+++ b/src/backend/access/heap/heapam.c
@@ -9779,7 +9779,7 @@ freeze_single_heap_page(Relation relation, Buffer buffer)
vistest = GlobalVisTestFor(relation);
heap_page_prune_and_freeze(relation, buffer, vistest, HEAP_PAGE_PRUNE_FREEZE,
- NULL, &presult, PRUNE_ON_ACCESS, &offnum, &new_relfrozen_xid, &new_relmin_mxid, false);
+ NULL, &presult, PRUNE_ON_ACCESS, &offnum, &new_relfrozen_xid, &new_relmin_mxid);
if (presult.ndeleted > presult.nnewlpdead)
pgstat_update_heap_dead_tuples(relation,
diff --git a/src/backend/access/heap/heapam_xlog.c b/src/backend/access/heap/heapam_xlog.c
index 768bd6ad53d..819f59dcf7c 100644
--- a/src/backend/access/heap/heapam_xlog.c
+++ b/src/backend/access/heap/heapam_xlog.c
@@ -107,7 +107,6 @@ heap_xlog_prune_freeze(XLogReaderState *record)
redirected, nredirected,
nowdead, ndead,
nowunused, nunused,
- (xlrec.flags & XLHP_REPAIR_FRAGMENTATION) != 0,
(xlrec.flags & XLHP_ON_TOAST_RELATION) != 0);
diff --git a/src/backend/access/heap/pruneheap.c b/src/backend/access/heap/pruneheap.c
index fa31e6432c8..3c92a05794a 100644
--- a/src/backend/access/heap/pruneheap.c
+++ b/src/backend/access/heap/pruneheap.c
@@ -273,7 +273,7 @@ heap_page_prune_opt(Relation relation, Buffer buffer)
* that during on-access pruning with the current implementation.
*/
heap_page_prune_and_freeze(relation, buffer, vistest, 0,
- NULL, &presult, PRUNE_ON_ACCESS, &dummy_off_loc, NULL, NULL, false);
+ NULL, &presult, PRUNE_ON_ACCESS, &dummy_off_loc, NULL, NULL);
/*
* Report the number of tuples reclaimed to pgstats. This is
@@ -367,8 +367,7 @@ heap_page_prune_and_freeze(Relation relation, Buffer buffer,
PruneReason reason,
OffsetNumber *off_loc,
TransactionId *new_relfrozen_xid,
- MultiXactId *new_relmin_mxid,
- bool repairFragmentation)
+ MultiXactId *new_relmin_mxid)
{
Page page = BufferGetPage(buffer);
BlockNumber blockno = BufferGetBlockNumber(buffer);
@@ -806,7 +805,6 @@ heap_page_prune_and_freeze(Relation relation, Buffer buffer,
prstate.redirected, prstate.nredirected,
prstate.nowdead, prstate.ndead,
prstate.nowunused, prstate.nunused,
- repairFragmentation,
IsToastRelation(relation));
}
@@ -862,8 +860,7 @@ heap_page_prune_and_freeze(Relation relation, Buffer buffer,
prstate.frozen, prstate.nfrozen,
prstate.redirected, prstate.nredirected,
prstate.nowdead, prstate.ndead,
- prstate.nowunused, prstate.nunused,
- repairFragmentation);
+ prstate.nowunused, prstate.nunused);
}
}
@@ -1593,7 +1590,6 @@ heap_page_prune_execute(Buffer buffer, bool lp_truncate_only,
OffsetNumber *redirected, int nredirected,
OffsetNumber *nowdead, int ndead,
OffsetNumber *nowunused, int nunused,
- bool repairFragmentation,
bool is_toast)
{
Page page = (Page) BufferGetPage(buffer);
@@ -1742,8 +1738,7 @@ heap_page_prune_execute(Buffer buffer, bool lp_truncate_only,
* Finally, repair any fragmentation, and update the page's hint bit
* about whether it has free pointers.
*/
- if (repairFragmentation)
- PageRepairFragmentation(page, is_toast);
+ PageRepairFragmentation(page, is_toast);
/*
* Now that the page has been modified, assert that redirect items
@@ -2099,8 +2094,7 @@ log_heap_prune_and_freeze(Relation relation, Buffer buffer,
HeapTupleFreeze *frozen, int nfrozen,
OffsetNumber *redirected, int nredirected,
OffsetNumber *dead, int ndead,
- OffsetNumber *unused, int nunused,
- bool repairFragmentation)
+ OffsetNumber *unused, int nunused)
{
xl_heap_prune xlrec;
XLogRecPtr recptr;
@@ -2119,9 +2113,6 @@ log_heap_prune_and_freeze(Relation relation, Buffer buffer,
if (IsToastRelation(relation))
xlrec.flags |= XLHP_ON_TOAST_RELATION;
- if (repairFragmentation)
- xlrec.flags |= XLHP_REPAIR_FRAGMENTATION;
-
/*
* Prepare data for the buffer. The arrays are not actually in the
* buffer, but we pretend that they are. When XLogInsert stores a full
diff --git a/src/backend/access/heap/vacuumlazy.c b/src/backend/access/heap/vacuumlazy.c
index 1264ad7b201..b0e8b8ec4a1 100644
--- a/src/backend/access/heap/vacuumlazy.c
+++ b/src/backend/access/heap/vacuumlazy.c
@@ -1971,8 +1971,7 @@ lazy_scan_prune(LVRelState *vacrel,
heap_page_prune_and_freeze(rel, buf, vacrel->vistest, prune_options,
&vacrel->cutoffs, &presult, PRUNE_VACUUM_SCAN,
&vacrel->offnum,
- &vacrel->NewRelfrozenXid, &vacrel->NewRelminMxid,
- true);
+ &vacrel->NewRelfrozenXid, &vacrel->NewRelminMxid);
Assert(MultiXactIdIsValid(vacrel->NewRelminMxid));
Assert(TransactionIdIsValid(vacrel->NewRelfrozenXid));
@@ -2857,8 +2856,7 @@ lazy_vacuum_heap_page(LVRelState *vacrel, BlockNumber blkno, Buffer buffer,
NULL, 0, /* frozen */
NULL, 0, /* redirected */
NULL, 0, /* dead */
- unused, nunused,
- true); /*repair fragmentation*/
+ unused, nunused);
}
/*
diff --git a/src/include/access/heapam.h b/src/include/access/heapam.h
index 923c5f4e97d..6006925c486 100644
--- a/src/include/access/heapam.h
+++ b/src/include/access/heapam.h
@@ -394,14 +394,12 @@ extern void heap_page_prune_and_freeze(Relation relation, Buffer buffer,
PruneReason reason,
OffsetNumber *off_loc,
TransactionId *new_relfrozen_xid,
- MultiXactId *new_relmin_mxid,
- bool repairFragmentation);
+ MultiXactId *new_relmin_mxid);
extern void heap_page_prune_execute(Buffer buffer, bool lp_truncate_only,
OffsetNumber *redirected, int nredirected,
OffsetNumber *nowdead, int ndead,
OffsetNumber *nowunused, int nunused,
- bool repairFragmentation,
bool is_toast);
extern void heap_get_root_tuples(Relation relation, Buffer buffer, Page page,
@@ -414,8 +412,7 @@ extern void log_heap_prune_and_freeze(Relation relation, Buffer buffer,
HeapTupleFreeze *frozen, int nfrozen,
OffsetNumber *redirected, int nredirected,
OffsetNumber *dead, int ndead,
- OffsetNumber *unused, int nunused,
- bool repairFragmentation);
+ OffsetNumber *unused, int nunused);
/* in heap/vacuumlazy.c */
struct VacuumParams;
--
2.48.1