From b353c4c26610e2fcdb5261de19b899dd082301fc Mon Sep 17 00:00:00 2001 From: Evgeny Voropaev 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 Author: Sergey Solovev --- 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