Use bump context for TID bitmaps stored by vacuum
authorJohn Naylor <john.naylor@postgresql.org>
Sun, 7 Apr 2024 05:27:34 +0000 (12:27 +0700)
committerJohn Naylor <john.naylor@postgresql.org>
Mon, 8 Apr 2024 07:39:49 +0000 (14:39 +0700)
commit8a1b31e6e59631807a08a4e9465134c343bbdf5e
tree72f147d6442438d8ce033c981a90a7b9c43a904c
parentbb766cde63b4f624d029b34c9cdd3d0a94fd5b46
Use bump context for TID bitmaps stored by vacuum

Vacuum does not pfree individual entries, and only frees the entire
storage space when finished with it. This allows using a bump context,
eliminating the chunk header in each leaf allocation. Most leaf
allocations will be 16 to 32 bytes, so that's a significant savings.
TidStoreCreateLocal gets a boolean parameter to indicate that the
created store is insert-only.

This requires a separate tree context for iteration, since we free
the iteration state after iteration completes.

Discussion: https://postgr.es/m/CANWCAZac%3DpBePg3rhX8nXkUuaLoiAJJLtmnCfZsPEAS4EtJ%3Dkg%40mail.gmail.com
Discussion: https://postgr.es/m/CANWCAZZQFfxvzO8yZHFWtQV+Z2gAMv1ku16Vu7KWmb5kZQyd1w@mail.gmail.com
src/backend/access/common/tidstore.c
src/backend/access/heap/vacuumlazy.c
src/include/access/tidstore.h
src/include/lib/radixtree.h
src/test/modules/test_tidstore/test_tidstore.c