mirror of
https://github.com/postgres/postgres.git
synced 2025-09-02 04:21:28 +03:00
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
This commit is contained in:
@@ -1715,9 +1715,9 @@ TransactionIdIsActive(TransactionId xid)
|
||||
* Note: the approximate horizons (see definition of GlobalVisState) are
|
||||
* updated by the computations done here. That's currently required for
|
||||
* correctness and a small optimization. Without doing so it's possible that
|
||||
* heap vacuum's call to heap_page_prune() uses a more conservative horizon
|
||||
* than later when deciding which tuples can be removed - which the code
|
||||
* doesn't expect (breaking HOT).
|
||||
* heap vacuum's call to heap_page_prune_and_freeze() uses a more conservative
|
||||
* horizon than later when deciding which tuples can be removed - which the
|
||||
* code doesn't expect (breaking HOT).
|
||||
*/
|
||||
static void
|
||||
ComputeXidHorizons(ComputeXidHorizonsResult *h)
|
||||
|
Reference in New Issue
Block a user