From ce22eecde8b5a07f6657b5c781e6bbfe95fa5707 Mon Sep 17 00:00:00 2001 From: David Christensen Date: Fri, 12 Jan 2024 17:19:14 -0500 Subject: [PATCH v3 21/28] chore: Rename MaxHeapTuplesPerPageDynamic to ClusterMaxHeapTuplesPerPage We are now using the computed variable instead of calculating the expression. --- contrib/pg_surgery/heap_surgery.c | 2 +- src/backend/access/brin/brin_bloom.c | 8 ++++---- src/backend/access/brin/brin_minmax_multi.c | 8 ++++---- src/backend/access/gin/ginpostinglist.c | 6 +++--- src/backend/access/heap/README.HOT | 2 +- src/backend/access/heap/heapam.c | 2 +- src/backend/access/heap/heapam_handler.c | 2 +- src/backend/access/heap/hio.c | 2 +- src/backend/access/heap/pruneheap.c | 12 ++++++------ src/backend/access/heap/vacuumlazy.c | 14 +++++++------- src/backend/storage/page/bufpage.c | 16 ++++++++-------- src/include/access/ginblock.h | 2 +- src/include/access/heapam.h | 2 +- src/include/access/htup_details.h | 1 - .../test_ginpostinglist/test_ginpostinglist.c | 6 +++--- 15 files changed, 42 insertions(+), 43 deletions(-) diff --git a/contrib/pg_surgery/heap_surgery.c b/contrib/pg_surgery/heap_surgery.c index 9db36ea20a..86aff2494e 100644 --- a/contrib/pg_surgery/heap_surgery.c +++ b/contrib/pg_surgery/heap_surgery.c @@ -225,7 +225,7 @@ heap_force_common(FunctionCallInfo fcinfo, HeapTupleForceOption heap_force_opt) } /* Mark it for processing. */ - Assert(offno < MaxHeapTuplesPerPageDynamic); + Assert(offno < ClusterMaxHeapTuplesPerPage); include_this_tid[offno] = true; } diff --git a/src/backend/access/brin/brin_bloom.c b/src/backend/access/brin/brin_bloom.c index d24fb5aa28..652a67f356 100644 --- a/src/backend/access/brin/brin_bloom.c +++ b/src/backend/access/brin/brin_bloom.c @@ -166,7 +166,7 @@ typedef struct BloomOptions * on the fact that the filter header is ~20B alone, which is about * the same as the filter bitmap for 16 distinct items with 1% false * positive rate. So by allowing lower values we'd not gain much. In - * any case, the min should not be larger than MaxHeapTuplesPerPageDynamic + * any case, the min should not be larger than ClusterMaxHeapTuplesPerPage * (~290), which is the theoretical maximum for single-page ranges. */ #define BLOOM_MIN_NDISTINCT_PER_RANGE 16 @@ -478,7 +478,7 @@ brin_bloom_opcinfo(PG_FUNCTION_ARGS) * * Adjust the ndistinct value based on the pagesPerRange value. First, * if it's negative, it's assumed to be relative to maximum number of - * tuples in the range (assuming each page gets MaxHeapTuplesPerPageDynamic + * tuples in the range (assuming each page gets ClusterMaxHeapTuplesPerPage * tuples, which is likely a significant over-estimate). We also clamp * the value, not to over-size the bloom filter unnecessarily. * @@ -493,7 +493,7 @@ brin_bloom_opcinfo(PG_FUNCTION_ARGS) * seems better to rely on the upper estimate. * * XXX We might also calculate a better estimate of rows per BRIN range, - * instead of using MaxHeapTuplesPerPageDynamic (which probably produces values + * instead of using ClusterMaxHeapTuplesPerPage (which probably produces values * much higher than reality). */ static int @@ -508,7 +508,7 @@ brin_bloom_get_ndistinct(BrinDesc *bdesc, BloomOptions *opts) Assert(BlockNumberIsValid(pagesPerRange)); - maxtuples = MaxHeapTuplesPerPageDynamic * pagesPerRange; + maxtuples = ClusterMaxHeapTuplesPerPage * pagesPerRange; /* * Similarly to n_distinct, negative values are relative - in this case to diff --git a/src/backend/access/brin/brin_minmax_multi.c b/src/backend/access/brin/brin_minmax_multi.c index 87fb144265..901676122a 100644 --- a/src/backend/access/brin/brin_minmax_multi.c +++ b/src/backend/access/brin/brin_minmax_multi.c @@ -2007,10 +2007,10 @@ brin_minmax_multi_distance_tid(PG_FUNCTION_ARGS) * We use the no-check variants here, because user-supplied values may * have (ip_posid == 0). See ItemPointerCompare. */ - da1 = ItemPointerGetBlockNumberNoCheck(pa1) * MaxHeapTuplesPerPageDynamic + + da1 = ItemPointerGetBlockNumberNoCheck(pa1) * ClusterMaxHeapTuplesPerPage + ItemPointerGetOffsetNumberNoCheck(pa1); - da2 = ItemPointerGetBlockNumberNoCheck(pa2) * MaxHeapTuplesPerPageDynamic + + da2 = ItemPointerGetBlockNumberNoCheck(pa2) * ClusterMaxHeapTuplesPerPage + ItemPointerGetOffsetNumberNoCheck(pa2); PG_RETURN_FLOAT8(da2 - da1); @@ -2461,7 +2461,7 @@ brin_minmax_multi_add_value(PG_FUNCTION_ARGS) * much lower, but meh. */ maxvalues = Min(target_maxvalues * MINMAX_BUFFER_FACTOR, - MaxHeapTuplesPerPageDynamic * pagesPerRange); + ClusterMaxHeapTuplesPerPage * pagesPerRange); /* but always at least the original value */ maxvalues = Max(maxvalues, target_maxvalues); @@ -2507,7 +2507,7 @@ brin_minmax_multi_add_value(PG_FUNCTION_ARGS) * much lower, but meh. */ maxvalues = Min(serialized->maxvalues * MINMAX_BUFFER_FACTOR, - MaxHeapTuplesPerPageDynamic * pagesPerRange); + ClusterMaxHeapTuplesPerPage * pagesPerRange); /* but always at least the original value */ maxvalues = Max(maxvalues, serialized->maxvalues); diff --git a/src/backend/access/gin/ginpostinglist.c b/src/backend/access/gin/ginpostinglist.c index 9bfae0ec81..8aa0f17bf8 100644 --- a/src/backend/access/gin/ginpostinglist.c +++ b/src/backend/access/gin/ginpostinglist.c @@ -26,7 +26,7 @@ * lowest 32 bits are the block number. That leaves 21 bits unused, i.e. * only 43 low bits are used. * - * 11 bits is enough for the offset number, because MaxHeapTuplesPerPageDynamic < + * 11 bits is enough for the offset number, because ClusterMaxHeapTuplesPerPage < * 2^11 on all supported block sizes. We are frugal with the bits, because * smaller integers use fewer bytes in the varbyte encoding, saving disk * space. (If we get a new table AM in the future that wants to use the full @@ -74,9 +74,9 @@ /* * How many bits do you need to encode offset number? OffsetNumber is a 16-bit * integer, but you can't fit that many items on a page. 11 ought to be more - * than enough. It's tempting to derive this from MaxHeapTuplesPerPageDynamic, and + * than enough. It's tempting to derive this from ClusterMaxHeapTuplesPerPage, and * use the minimum number of bits, but that would require changing the on-disk - * format if MaxHeapTuplesPerPageDynamic changes. Better to leave some slack. + * format if ClusterMaxHeapTuplesPerPage changes. Better to leave some slack. */ #define MaxHeapTuplesPerPageBits 11 diff --git a/src/backend/access/heap/README.HOT b/src/backend/access/heap/README.HOT index 296ae36310..e286e1dec3 100644 --- a/src/backend/access/heap/README.HOT +++ b/src/backend/access/heap/README.HOT @@ -264,7 +264,7 @@ of line pointer bloat: we might end up with huge numbers of line pointers and just a few actual tuples on a page. To limit the damage in the worst case, and to keep various work arrays as well as the bitmaps in bitmap scans reasonably sized, the maximum number of line pointers per page -is arbitrarily capped at MaxHeapTuplesPerPageDynamic (the most tuples that +is arbitrarily capped at ClusterMaxHeapTuplesPerPage (the most tuples that could fit without HOT pruning). Effectively, space reclamation happens during tuple retrieval when the diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c index afa09835c3..cf3459c08d 100644 --- a/src/backend/access/heap/heapam.c +++ b/src/backend/access/heap/heapam.c @@ -478,7 +478,7 @@ heapgetpage(TableScanDesc sscan, BlockNumber block) LockBuffer(buffer, BUFFER_LOCK_UNLOCK); - Assert(ntup <= MaxHeapTuplesPerPageDynamic); + Assert(ntup <= ClusterMaxHeapTuplesPerPage); scan->rs_ntuples = ntup; } diff --git a/src/backend/access/heap/heapam_handler.c b/src/backend/access/heap/heapam_handler.c index 6ee063d9b6..3d51900d33 100644 --- a/src/backend/access/heap/heapam_handler.c +++ b/src/backend/access/heap/heapam_handler.c @@ -2220,7 +2220,7 @@ heapam_scan_bitmap_next_block(TableScanDesc scan, LockBuffer(buffer, BUFFER_LOCK_UNLOCK); - Assert(ntup <= MaxHeapTuplesPerPageDynamic); + Assert(ntup <= ClusterMaxHeapTuplesPerPage); hscan->rs_ntuples = ntup; return ntup > 0; diff --git a/src/backend/access/heap/hio.c b/src/backend/access/heap/hio.c index 9da5d3d158..3e3963503b 100644 --- a/src/backend/access/heap/hio.c +++ b/src/backend/access/heap/hio.c @@ -547,7 +547,7 @@ RelationGetBufferForTuple(Relation relation, Size len, * extensions while inserting large tuples into low-fillfactor tables. */ nearlyEmptyFreeSpace = ClusterMaxHeapTupleSize - - (MaxHeapTuplesPerPageDynamic / 8 * sizeof(ItemIdData)); + (ClusterMaxHeapTuplesPerPage / 8 * sizeof(ItemIdData)); if (len + saveFreeSpace > nearlyEmptyFreeSpace) targetFreeSpace = Max(len, nearlyEmptyFreeSpace); else diff --git a/src/backend/access/heap/pruneheap.c b/src/backend/access/heap/pruneheap.c index 193736f419..4073b0db35 100644 --- a/src/backend/access/heap/pruneheap.c +++ b/src/backend/access/heap/pruneheap.c @@ -51,7 +51,7 @@ typedef struct /* * marked[i] is true if item i is entered in one of the above arrays. * - * This needs to be MaxHeapTuplesPerPageDynamic + 1 long as FirstOffsetNumber is + * This needs to be ClusterMaxHeapTuplesPerPage + 1 long as FirstOffsetNumber is * 1. Otherwise every access would need to subtract 1. */ bool marked[MaxHeapTuplesPerPageLimit + 1]; @@ -777,7 +777,7 @@ static void heap_prune_record_redirect(PruneState *prstate, OffsetNumber offnum, OffsetNumber rdoffnum) { - Assert(prstate->nredirected < MaxHeapTuplesPerPageDynamic); + Assert(prstate->nredirected < ClusterMaxHeapTuplesPerPage); prstate->redirected[prstate->nredirected * 2] = offnum; prstate->redirected[prstate->nredirected * 2 + 1] = rdoffnum; prstate->nredirected++; @@ -791,7 +791,7 @@ heap_prune_record_redirect(PruneState *prstate, static void heap_prune_record_dead(PruneState *prstate, OffsetNumber offnum) { - Assert(prstate->ndead < MaxHeapTuplesPerPageDynamic); + Assert(prstate->ndead < ClusterMaxHeapTuplesPerPage); prstate->nowdead[prstate->ndead] = offnum; prstate->ndead++; Assert(!prstate->marked[offnum]); @@ -823,7 +823,7 @@ heap_prune_record_dead_or_unused(PruneState *prstate, OffsetNumber offnum) static void heap_prune_record_unused(PruneState *prstate, OffsetNumber offnum) { - Assert(prstate->nunused < MaxHeapTuplesPerPageDynamic); + Assert(prstate->nunused < ClusterMaxHeapTuplesPerPage); prstate->nowunused[prstate->nunused] = offnum; prstate->nunused++; Assert(!prstate->marked[offnum]); @@ -1036,7 +1036,7 @@ page_verify_redirects(Page page) * If item k is part of a HOT-chain with root at item j, then we set * root_offsets[k - 1] = j. * - * The passed-in root_offsets array must have MaxHeapTuplesPerPageDynamic entries. + * The passed-in root_offsets array must have ClusterMaxHeapTuplesPerPage entries. * Unused entries are filled with InvalidOffsetNumber (zero). * * The function must be called with at least share lock on the buffer, to @@ -1053,7 +1053,7 @@ heap_get_root_tuples(Page page, OffsetNumber *root_offsets) maxoff; MemSet(root_offsets, InvalidOffsetNumber, - MaxHeapTuplesPerPageDynamic * sizeof(OffsetNumber)); + ClusterMaxHeapTuplesPerPage * sizeof(OffsetNumber)); maxoff = PageGetMaxOffsetNumber(page); for (offnum = FirstOffsetNumber; offnum <= maxoff; offnum = OffsetNumberNext(offnum)) diff --git a/src/backend/access/heap/vacuumlazy.c b/src/backend/access/heap/vacuumlazy.c index 3fce5dcdac..e6b7edcc91 100644 --- a/src/backend/access/heap/vacuumlazy.c +++ b/src/backend/access/heap/vacuumlazy.c @@ -892,8 +892,8 @@ lazy_scan_heap(LVRelState *vacrel) * dead_items TIDs, pause and do a cycle of vacuuming before we tackle * this page. */ - Assert(dead_items->max_items >= MaxHeapTuplesPerPageDynamic); - if (dead_items->max_items - dead_items->num_items < MaxHeapTuplesPerPageDynamic) + Assert(dead_items->max_items >= ClusterMaxHeapTuplesPerPage); + if (dead_items->max_items - dead_items->num_items < ClusterMaxHeapTuplesPerPage) { /* * Before beginning index vacuuming, we release any pin we may @@ -3121,16 +3121,16 @@ dead_items_max_items(LVRelState *vacrel) max_items = Min(max_items, MAXDEADITEMS(MaxAllocSize)); /* curious coding here to ensure the multiplication can't overflow */ - if ((BlockNumber) (max_items / MaxHeapTuplesPerPageDynamic) > rel_pages) - max_items = rel_pages * MaxHeapTuplesPerPageDynamic; + if ((BlockNumber) (max_items / ClusterMaxHeapTuplesPerPage) > rel_pages) + max_items = rel_pages * ClusterMaxHeapTuplesPerPage; /* stay sane if small maintenance_work_mem */ - max_items = Max(max_items, MaxHeapTuplesPerPageDynamic); + max_items = Max(max_items, ClusterMaxHeapTuplesPerPage); } else { /* One-pass case only stores a single heap page's TIDs at a time */ - max_items = MaxHeapTuplesPerPageDynamic; + max_items = ClusterMaxHeapTuplesPerPage; } return (int) max_items; @@ -3150,7 +3150,7 @@ dead_items_alloc(LVRelState *vacrel, int nworkers) int max_items; max_items = dead_items_max_items(vacrel); - Assert(max_items >= MaxHeapTuplesPerPageDynamic); + Assert(max_items >= ClusterMaxHeapTuplesPerPage); /* * Initialize state for a parallel vacuum. As of now, only one worker can diff --git a/src/backend/storage/page/bufpage.c b/src/backend/storage/page/bufpage.c index f84343e6ce..e4bbc46405 100644 --- a/src/backend/storage/page/bufpage.c +++ b/src/backend/storage/page/bufpage.c @@ -185,7 +185,7 @@ PageIsVerifiedExtended(Page page, BlockNumber blkno, int flags) * one that is both unused and deallocated. * * If flag PAI_IS_HEAP is set, we enforce that there can't be more than - * MaxHeapTuplesPerPageDynamic line pointers on the page. + * ClusterMaxHeapTuplesPerPage line pointers on the page. * * !!! EREPORT(ERROR) IS DISALLOWED HERE !!! */ @@ -294,9 +294,9 @@ PageAddItemExtended(Page page, } /* Reject placing items beyond heap boundary, if heap */ - if ((flags & PAI_IS_HEAP) != 0 && offsetNumber > MaxHeapTuplesPerPageDynamic) + if ((flags & PAI_IS_HEAP) != 0 && offsetNumber > ClusterMaxHeapTuplesPerPage) { - elog(WARNING, "can't put more than MaxHeapTuplesPerPageDynamic items in a heap page"); + elog(WARNING, "can't put more than ClusterMaxHeapTuplesPerPage items in a heap page"); return InvalidOffsetNumber; } @@ -978,12 +978,12 @@ PageGetExactFreeSpace(Page page) * reduced by the space needed for a new line pointer. * * The difference between this and PageGetFreeSpace is that this will return - * zero if there are already MaxHeapTuplesPerPageDynamic line pointers in the page + * zero if there are already ClusterMaxHeapTuplesPerPage line pointers in the page * and none are free. We use this to enforce that no more than - * MaxHeapTuplesPerPageDynamic line pointers are created on a heap page. (Although + * ClusterMaxHeapTuplesPerPage line pointers are created on a heap page. (Although * no more tuples than that could fit anyway, in the presence of redirected * or dead line pointers it'd be possible to have too many line pointers. - * To avoid breaking code that assumes MaxHeapTuplesPerPageDynamic is a hard limit + * To avoid breaking code that assumes ClusterMaxHeapTuplesPerPage is a hard limit * on the number of line pointers, we make this extra check.) */ Size @@ -998,10 +998,10 @@ PageGetHeapFreeSpace(Page page) nline; /* - * Are there already MaxHeapTuplesPerPageDynamic line pointers in the page? + * Are there already ClusterMaxHeapTuplesPerPage line pointers in the page? */ nline = PageGetMaxOffsetNumber(page); - if (nline >= MaxHeapTuplesPerPageDynamic) + if (nline >= ClusterMaxHeapTuplesPerPage) { if (PageHasFreeLinePointers(page)) { diff --git a/src/include/access/ginblock.h b/src/include/access/ginblock.h index 2d7e295df0..05b2f34408 100644 --- a/src/include/access/ginblock.h +++ b/src/include/access/ginblock.h @@ -162,7 +162,7 @@ extern bool GinPageIsRecyclable(Page page); * pointers for that page * Note that these are all distinguishable from an "invalid" item pointer * (which is InvalidBlockNumber/0) as well as from all normal item - * pointers (which have item numbers in the range 1..MaxHeapTuplesPerPageDynamic). + * pointers (which have item numbers in the range 1..ClusterMaxHeapTuplesPerPage). */ #define ItemPointerSetMin(p) \ ItemPointerSet((p), (BlockNumber)0, (OffsetNumber)0) diff --git a/src/include/access/heapam.h b/src/include/access/heapam.h index 2f693483f6..3217d72f99 100644 --- a/src/include/access/heapam.h +++ b/src/include/access/heapam.h @@ -205,7 +205,7 @@ typedef struct PruneResult * This is of type int8[], instead of HTSV_Result[], so we can use -1 to * indicate no visibility has been computed, e.g. for LP_DEAD items. * - * This needs to be MaxHeapTuplesPerPageDynamic + 1 long as FirstOffsetNumber is + * This needs to be ClusterMaxHeapTuplesPerPage + 1 long as FirstOffsetNumber is * 1. Otherwise every access would need to subtract 1. */ int8 htsv[MaxHeapTuplesPerPageLimit + 1]; diff --git a/src/include/access/htup_details.h b/src/include/access/htup_details.h index bb473ab679..dada8c7c71 100644 --- a/src/include/access/htup_details.h +++ b/src/include/access/htup_details.h @@ -580,7 +580,6 @@ StaticAssertDecl(MaxOffsetNumber < SpecTokenOffsetNumber, ((int) ((usablespace) / \ (MAXALIGN(SizeofHeapTupleHeader) + sizeof(ItemIdData)))) #define MaxHeapTuplesPerPageLimit (CalcMaxHeapTuplesPerPage(PageUsableSpaceMax)) -#define MaxHeapTuplesPerPageDynamic (CalcMaxHeapTuplesPerPage(PageUsableSpace)) /* * MaxAttrSize is a somewhat arbitrary upper limit on the declared size of diff --git a/src/test/modules/test_ginpostinglist/test_ginpostinglist.c b/src/test/modules/test_ginpostinglist/test_ginpostinglist.c index 6e0d184d08..f79dbc2bdd 100644 --- a/src/test/modules/test_ginpostinglist/test_ginpostinglist.c +++ b/src/test/modules/test_ginpostinglist/test_ginpostinglist.c @@ -88,9 +88,9 @@ Datum test_ginpostinglist(PG_FUNCTION_ARGS) { test_itemptr_pair(0, 2, 14); - test_itemptr_pair(0, MaxHeapTuplesPerPageDynamic, 14); - test_itemptr_pair(MaxBlockNumber, MaxHeapTuplesPerPageDynamic, 14); - test_itemptr_pair(MaxBlockNumber, MaxHeapTuplesPerPageDynamic, 16); + test_itemptr_pair(0, ClusterMaxHeapTuplesPerPage, 14); + test_itemptr_pair(MaxBlockNumber, ClusterMaxHeapTuplesPerPage, 14); + test_itemptr_pair(MaxBlockNumber, ClusterMaxHeapTuplesPerPage, 16); PG_RETURN_VOID(); } -- 2.40.1