WAL log VM setting during vacuum phase I in XLOG_HEAP2_PRUNE_VACUUM_SCAN Vacuum no longer emits a separate WAL record for each page set all-visible or all-frozen during phase I. Instead, visibility map updates are now included in the XLOG_HEAP2_PRUNE_VACUUM_SCAN record that is already emitted for pruning and freezing.
Previously, heap_page_prune_and_freeze() determined whether a page was all-visible, but the corresponding VM bits were only set later in lazy_scan_prune(). Now the VM is updated immediately in heap_page_prune_and_freeze(), at the same time as the heap modifications. This reduces WAL volume produced by vacuum. For now, vacuum is still the only user of heap_page_prune_and_freeze() allowed to set the VM. On-access pruning is not yet able to set the VM. Author: Melanie Plageman <[email protected]> Reviewed-by: Andres Freund <[email protected]> Reviewed-by: Kirill Reshke <[email protected]> Reviewed-by: Chao Li <[email protected]> Earlier version Reviewed-by: Robert Haas <[email protected]> Discussion: https://postgr.es/m/flat/CAAKRu_ZMw6Npd_qm2KM%2BFwQ3cMOMx1Dh3VMhp8-V7SOLxdK9-g%40mail.gmail.com Branch ------ master Details ------- https://git.postgresql.org/pg/commitdiff/1252a4ee28636734d68f1acd33be45399c83dc53 Modified Files -------------- src/backend/access/heap/pruneheap.c | 245 +++++++++++++++++++++++++---------- src/backend/access/heap/vacuumlazy.c | 113 ++-------------- src/include/access/heapam.h | 37 +++--- 3 files changed, 205 insertions(+), 190 deletions(-)
