mirror of
https://github.com/postgres/postgres.git
synced 2025-11-21 00:42:43 +03:00
Revert "Avoid the creation of the free space map for small heap relations".
This feature was using a process local map to track the first few blocks in the relation. The map was reset each time we get the block with enough freespace. It was discussed that it would be better to track this map on a per-relation basis in relcache and then invalidate the same whenever vacuum frees up some space in the page or when FSM is created. The new design would be better both in terms of API design and performance. List of commits reverted, in reverse chronological order:06c8a5090eImprove code comments inb0eaa4c51b.13e8643bfcDuring pg_upgrade, conditionally skip transfer of FSMs.6f918159a9Add more tests for FSM.9c32e4c350Clear the local map when not used.29d108cdecUpdate the documentation for FSM behavior..08ecdfe7e5Make FSM test portable.b0eaa4c51bAvoid creation of the free space map for small heap relations. Discussion: https://postgr.es/m/20190416180452.3pm6uegx54iitbt5@alap3.anarazel.de
This commit is contained in:
@@ -153,7 +153,7 @@ static BufferAccessStrategy vac_strategy;
|
||||
static void lazy_scan_heap(Relation onerel, VacuumParams *params,
|
||||
LVRelStats *vacrelstats, Relation *Irel, int nindexes,
|
||||
bool aggressive);
|
||||
static void lazy_vacuum_heap(Relation onerel, LVRelStats *vacrelstats, BlockNumber nblocks);
|
||||
static void lazy_vacuum_heap(Relation onerel, LVRelStats *vacrelstats);
|
||||
static bool lazy_check_needs_freeze(Buffer buf, bool *hastup);
|
||||
static void lazy_vacuum_index(Relation indrel,
|
||||
IndexBulkDeleteResult **stats,
|
||||
@@ -780,7 +780,7 @@ lazy_scan_heap(Relation onerel, VacuumParams *params, LVRelStats *vacrelstats,
|
||||
pgstat_progress_update_multi_param(2, hvp_index, hvp_val);
|
||||
|
||||
/* Remove tuples from heap */
|
||||
lazy_vacuum_heap(onerel, vacrelstats, nblocks);
|
||||
lazy_vacuum_heap(onerel, vacrelstats);
|
||||
|
||||
/*
|
||||
* Forget the now-vacuumed tuples, and press on, but be careful
|
||||
@@ -919,7 +919,7 @@ lazy_scan_heap(Relation onerel, VacuumParams *params, LVRelStats *vacrelstats,
|
||||
Size freespace;
|
||||
|
||||
freespace = BufferGetPageSize(buf) - SizeOfPageHeaderData;
|
||||
RecordPageWithFreeSpace(onerel, blkno, freespace, nblocks);
|
||||
RecordPageWithFreeSpace(onerel, blkno, freespace);
|
||||
}
|
||||
}
|
||||
continue;
|
||||
@@ -963,7 +963,7 @@ lazy_scan_heap(Relation onerel, VacuumParams *params, LVRelStats *vacrelstats,
|
||||
}
|
||||
|
||||
UnlockReleaseBuffer(buf);
|
||||
RecordPageWithFreeSpace(onerel, blkno, freespace, nblocks);
|
||||
RecordPageWithFreeSpace(onerel, blkno, freespace);
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -1381,7 +1381,7 @@ lazy_scan_heap(Relation onerel, VacuumParams *params, LVRelStats *vacrelstats,
|
||||
* taken if there are no indexes.)
|
||||
*/
|
||||
if (vacrelstats->num_dead_tuples == prev_dead_count)
|
||||
RecordPageWithFreeSpace(onerel, blkno, freespace, nblocks);
|
||||
RecordPageWithFreeSpace(onerel, blkno, freespace);
|
||||
}
|
||||
|
||||
/* report that everything is scanned and vacuumed */
|
||||
@@ -1443,7 +1443,7 @@ lazy_scan_heap(Relation onerel, VacuumParams *params, LVRelStats *vacrelstats,
|
||||
/* Remove tuples from heap */
|
||||
pgstat_progress_update_param(PROGRESS_VACUUM_PHASE,
|
||||
PROGRESS_VACUUM_PHASE_VACUUM_HEAP);
|
||||
lazy_vacuum_heap(onerel, vacrelstats, nblocks);
|
||||
lazy_vacuum_heap(onerel, vacrelstats);
|
||||
vacrelstats->num_index_scans++;
|
||||
}
|
||||
|
||||
@@ -1517,10 +1517,9 @@ lazy_scan_heap(Relation onerel, VacuumParams *params, LVRelStats *vacrelstats,
|
||||
* Note: the reason for doing this as a second pass is we cannot remove
|
||||
* the tuples until we've removed their index entries, and we want to
|
||||
* process index entry removal in batches as large as possible.
|
||||
* Note: nblocks is passed as an optimization for RecordPageWithFreeSpace().
|
||||
*/
|
||||
static void
|
||||
lazy_vacuum_heap(Relation onerel, LVRelStats *vacrelstats, BlockNumber nblocks)
|
||||
lazy_vacuum_heap(Relation onerel, LVRelStats *vacrelstats)
|
||||
{
|
||||
int tupindex;
|
||||
int npages;
|
||||
@@ -1557,7 +1556,7 @@ lazy_vacuum_heap(Relation onerel, LVRelStats *vacrelstats, BlockNumber nblocks)
|
||||
freespace = PageGetHeapFreeSpace(page);
|
||||
|
||||
UnlockReleaseBuffer(buf);
|
||||
RecordPageWithFreeSpace(onerel, tblk, freespace, nblocks);
|
||||
RecordPageWithFreeSpace(onerel, tblk, freespace);
|
||||
npages++;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user