Truncate line pointer array during VACUUM.
Peter Geoghegan <pg@bowt.ie>
Truncate line pointer array during VACUUM. Teach VACUUM to truncate the line pointer array of each heap page when a contiguous group of LP_UNUSED line pointers appear at the end of the array -- these unused and unreferenced items are excluded. This process occurs during VACUUM's second pass over the heap, right after LP_DEAD line pointers on the page (those encountered/pruned during the first pass) are marked LP_UNUSED. Truncation avoids line pointer bloat with certain workloads, particularly those involving continual range DELETEs and bulk INSERTs against the same table. Also harden heapam code to check for an out-of-range page offset number in places where we weren't already doing so. Author: Matthias van de Meent <boekewurm+postgres@gmail.com> Author: Peter Geoghegan <pg@bowt.ie> Reviewed-By: Masahiko Sawada <sawada.mshk@gmail.com> Reviewed-By: Peter Geoghegan <pg@bowt.ie> Discussion: https://postgr.es/m/CAEze2WjgaQc55Y5f5CQd3L=eS5CZcff2Obxp=O6pto8-f0hC4w@mail.gmail.com Discussion: https://postgr.es/m/CAH2-Wzn6a64PJM1Ggzm=uvx2otsopJMhFQj_g1rAj4GWr3ZSzw@mail.gmail.com
Files
| Path | Change | +/− |
|---|---|---|
| src/backend/access/heap/heapam.c | modified | +17 −5 |
| src/backend/access/heap/pruneheap.c | modified | +4 −0 |
| src/backend/access/heap/vacuumlazy.c | modified | +14 −2 |
| src/backend/storage/page/bufpage.c | modified | +108 −4 |
| src/include/storage/bufpage.h | modified | +1 −0 |
Discussion
- New IndexAM API controlling index vacuum strategies 130 messages · 2020-12-22 → 2021-04-16
- Lowering the ever-growing heap->pd_lower 55 messages · 2021-03-09 → 2022-04-08