Combine freezing and pruning steps in VACUUM
Heikki Linnakangas <heikki.linnakangas@iki.fi>
Combine freezing and pruning steps in VACUUM Execute both freezing and pruning of tuples in the same heap_page_prune() function, now called heap_page_prune_and_freeze(), and emit a single WAL record containing all changes. That reduces the overall amount of WAL generated. This moves the freezing logic from vacuumlazy.c to the heap_page_prune_and_freeze() function. The main difference in the coding is that in vacuumlazy.c, we looked at the tuples after the pruning had already happened, but in heap_page_prune_and_freeze() we operate on the tuples before pruning. The heap_prepare_freeze_tuple() function is now invoked after we have determined that a tuple is not going to be pruned away. VACUUM no longer needs to loop through the items on the page after pruning. heap_page_prune_and_freeze() does all the work. It now returns the list of dead offsets, including existing LP_DEAD items, to the caller. Similarly it's now responsible for tracking 'all_visible', 'all_frozen', and 'hastup' on the caller's behalf. Author: Melanie Plageman <melanieplageman@gmail.com> Discussion: https://www.postgresql.org/message-id/20240330055710.kqg6ii2cdojsxgje@liskov
Files
| Path | Change | +/− |
|---|---|---|
| src/backend/access/heap/heapam.c | modified | +23 −44 |
| src/backend/access/heap/heapam_handler.c | modified | +1 −1 |
| src/backend/access/heap/pruneheap.c | modified | +663 −98 |
| src/backend/access/heap/vacuumlazy.c | modified | +72 −363 |
| src/backend/storage/ipc/procarray.c | modified | +3 −3 |
| src/include/access/heapam.h | modified | +50 −35 |
| src/tools/pgindent/typedefs.list | modified | +1 −1 |
Discussion
- Combine Prune and Freeze records emitted by vacuum 51 messages · 2024-01-24 → 2024-04-03