From 7e424b22e79f98197a0532459f97c5dbea8074be Mon Sep 17 00:00:00 2001 From: David Christensen Date: Tue, 12 Dec 2023 17:14:59 -0500 Subject: [PATCH v3 09/28] chore: Split MaxTIDsPerBTreePage into Limit and Dynamic variants Mechanical replacement, removing the old constant --- contrib/amcheck/verify_nbtree.c | 4 ++-- src/backend/access/nbtree/nbtdedup.c | 4 ++-- src/backend/access/nbtree/nbtinsert.c | 4 ++-- src/backend/access/nbtree/nbtree.c | 4 ++-- src/backend/access/nbtree/nbtsearch.c | 8 ++++---- src/include/access/nbtree.h | 5 ++--- 6 files changed, 14 insertions(+), 15 deletions(-) diff --git a/contrib/amcheck/verify_nbtree.c b/contrib/amcheck/verify_nbtree.c index 9d16431682..4d2ae3927e 100644 --- a/contrib/amcheck/verify_nbtree.c +++ b/contrib/amcheck/verify_nbtree.c @@ -533,12 +533,12 @@ bt_check_every_level(Relation rel, Relation heaprel, bool heapkeyspace, /* * Size Bloom filter based on estimated number of tuples in index, * while conservatively assuming that each block must contain at least - * MaxTIDsPerBTreePage / 3 "plain" tuples -- see + * MaxTIDsPerBTreePageDynamic / 3 "plain" tuples -- see * bt_posting_plain_tuple() for definition, and details of how posting * list tuples are handled. */ total_pages = RelationGetNumberOfBlocks(rel); - total_elems = Max(total_pages * (MaxTIDsPerBTreePage / 3), + total_elems = Max(total_pages * (MaxTIDsPerBTreePageDynamic / 3), (int64) state->rel->rd_rel->reltuples); /* Generate a random seed to avoid repetition */ seed = pg_prng_uint64(&pg_global_prng_state); diff --git a/src/backend/access/nbtree/nbtdedup.c b/src/backend/access/nbtree/nbtdedup.c index 6808dbe064..d6655b2988 100644 --- a/src/backend/access/nbtree/nbtdedup.c +++ b/src/backend/access/nbtree/nbtdedup.c @@ -355,8 +355,8 @@ _bt_bottomupdel_pass(Relation rel, Buffer buf, Relation heapRel, delstate.bottomup = true; delstate.bottomupfreespace = Max(BLCKSZ / 16, newitemsz); delstate.ndeltids = 0; - delstate.deltids = palloc(MaxTIDsPerBTreePage * sizeof(TM_IndexDelete)); - delstate.status = palloc(MaxTIDsPerBTreePage * sizeof(TM_IndexStatus)); + delstate.deltids = palloc(MaxTIDsPerBTreePageDynamic * sizeof(TM_IndexDelete)); + delstate.status = palloc(MaxTIDsPerBTreePageDynamic * sizeof(TM_IndexStatus)); minoff = P_FIRSTDATAKEY(opaque); maxoff = PageGetMaxOffsetNumber(page); diff --git a/src/backend/access/nbtree/nbtinsert.c b/src/backend/access/nbtree/nbtinsert.c index 4674e5267a..b41365b16b 100644 --- a/src/backend/access/nbtree/nbtinsert.c +++ b/src/backend/access/nbtree/nbtinsert.c @@ -2829,8 +2829,8 @@ _bt_simpledel_pass(Relation rel, Buffer buffer, Relation heapRel, delstate.bottomup = false; delstate.bottomupfreespace = 0; delstate.ndeltids = 0; - delstate.deltids = palloc(MaxTIDsPerBTreePage * sizeof(TM_IndexDelete)); - delstate.status = palloc(MaxTIDsPerBTreePage * sizeof(TM_IndexStatus)); + delstate.deltids = palloc(MaxTIDsPerBTreePageDynamic * sizeof(TM_IndexDelete)); + delstate.status = palloc(MaxTIDsPerBTreePageDynamic * sizeof(TM_IndexStatus)); for (offnum = minoff; offnum <= maxoff; diff --git a/src/backend/access/nbtree/nbtree.c b/src/backend/access/nbtree/nbtree.c index 2a4f990583..041bb73c47 100644 --- a/src/backend/access/nbtree/nbtree.c +++ b/src/backend/access/nbtree/nbtree.c @@ -263,8 +263,8 @@ btgettuple(IndexScanDesc scan, ScanDirection dir) */ if (so->killedItems == NULL) so->killedItems = (int *) - palloc(MaxTIDsPerBTreePage * sizeof(int)); - if (so->numKilled < MaxTIDsPerBTreePage) + palloc(MaxTIDsPerBTreePageDynamic * sizeof(int)); + if (so->numKilled < MaxTIDsPerBTreePageDynamic) so->killedItems[so->numKilled++] = so->currPos.itemIndex; } diff --git a/src/backend/access/nbtree/nbtsearch.c b/src/backend/access/nbtree/nbtsearch.c index 63ee9ba225..8e80a41571 100644 --- a/src/backend/access/nbtree/nbtsearch.c +++ b/src/backend/access/nbtree/nbtsearch.c @@ -1726,7 +1726,7 @@ _bt_readpage(IndexScanDesc scan, ScanDirection dir, OffsetNumber offnum, if (!continuescan) so->currPos.moreRight = false; - Assert(itemIndex <= MaxTIDsPerBTreePage); + Assert(itemIndex <= MaxTIDsPerBTreePageDynamic); so->currPos.firstItem = 0; so->currPos.lastItem = itemIndex - 1; so->currPos.itemIndex = 0; @@ -1734,7 +1734,7 @@ _bt_readpage(IndexScanDesc scan, ScanDirection dir, OffsetNumber offnum, else { /* load items[] in descending order */ - itemIndex = MaxTIDsPerBTreePage; + itemIndex = MaxTIDsPerBTreePageDynamic; offnum = Min(offnum, maxoff); @@ -1836,8 +1836,8 @@ _bt_readpage(IndexScanDesc scan, ScanDirection dir, OffsetNumber offnum, Assert(itemIndex >= 0); so->currPos.firstItem = itemIndex; - so->currPos.lastItem = MaxTIDsPerBTreePage - 1; - so->currPos.itemIndex = MaxTIDsPerBTreePage - 1; + so->currPos.lastItem = MaxTIDsPerBTreePageDynamic - 1; + so->currPos.itemIndex = MaxTIDsPerBTreePageDynamic - 1; } return (so->currPos.firstItem <= so->currPos.lastItem); diff --git a/src/include/access/nbtree.h b/src/include/access/nbtree.h index 2873401e3f..9575ca17ce 100644 --- a/src/include/access/nbtree.h +++ b/src/include/access/nbtree.h @@ -172,7 +172,7 @@ typedef struct BTMetaPageData MAXALIGN(sizeof(BTPageOpaqueData))) / 3) /* - * MaxTIDsPerBTreePage is an upper bound on the number of heap TIDs tuples + * MaxTIDsPerBTreePageDynamic is an upper bound on the number of heap TIDs tuples * that may be stored on a btree leaf page. It is used to size the * per-page temporary buffers. * @@ -187,7 +187,6 @@ typedef struct BTMetaPageData sizeof(ItemPointerData)) #define MaxTIDsPerBTreePageLimit (CalcMaxTIDsPerBTreePage(PageUsableSpaceMax)) #define MaxTIDsPerBTreePageDynamic (CalcMaxTIDsPerBTreePage(PageUsableSpace)) -#define MaxTIDsPerBTreePage MaxTIDsPerBTreePageLimit /* * The leaf-page fillfactor defaults to 90% but is user-adjustable. * For pages above the leaf level, we use a fixed 70% fillfactor. @@ -984,7 +983,7 @@ typedef struct BTScanPosData int lastItem; /* last valid index in items[] */ int itemIndex; /* current index in items[] */ - BTScanPosItem items[MaxTIDsPerBTreePage]; /* MUST BE LAST */ + BTScanPosItem items[MaxTIDsPerBTreePageLimit]; /* MUST BE LAST */ } BTScanPosData; typedef BTScanPosData *BTScanPos; -- 2.40.1