From 17529bdcdf931be8d333b24c6410c7e38afecd00 Mon Sep 17 00:00:00 2001 From: David Christensen Date: Tue, 12 Dec 2023 17:14:59 -0500 Subject: [PATCH v2 9/9] Split MaxTIDsPerBTreePage into Limit and Dynamic variants --- 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 6026d7549d..c8035fb773 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 d4db0b28f2..a8134c78a0 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 a75de71659..ec9f04e99e 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 64d2f07fc0..8a9c690c87 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 be61b3868f..ad9480711f 100644 --- a/src/backend/access/nbtree/nbtsearch.c +++ b/src/backend/access/nbtree/nbtsearch.c @@ -1724,7 +1724,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; @@ -1732,7 +1732,7 @@ _bt_readpage(IndexScanDesc scan, ScanDirection dir, OffsetNumber offnum) else { /* load items[] in descending order */ - itemIndex = MaxTIDsPerBTreePage; + itemIndex = MaxTIDsPerBTreePageDynamic; offnum = Min(offnum, maxoff); @@ -1831,8 +1831,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 d2ab4903bb..e8a948842f 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