On Fri, 8 Apr 2022 at 01:01, Andres Freund <and...@anarazel.de> wrote: > > Hi, > > On 2022-04-04 19:24:22 -0700, Peter Geoghegan wrote: > > We should definitely increase MaxHeapTuplesPerPage before too long, > > for a variety of reasons that I have talked about in the past. Its > > current value is 291 on all mainstream platforms, a value that's > > derived from accidental historic details -- which predate HOT. > > I'm on-board with that - but I think we should rewrite a bunch of places that > use MaxHeapTuplesPerPage sized-arrays on the stack first. It's not great using > several KB of stack at the current the current value already (*), but if it > grows > further...
Yeah, I think we should definately support more line pointers on a heap page, but abusing MaxHeapTuplesPerPage for that is misleading: the current value is the physical limit for heap tuples, as we have at most 1 heap tuple per line pointer and thus the MaxHeapTuplesPerPage won't change. A macro MaxHeapLinePointersPerPage would probably be more useful, which could be as follows (assuming we don't want to allow filling a page with effectively only dead line pointers): #define MaxHeapLinePointersPerPage \ ((int) (((BLCKSZ - SizeOfPageHeaderData) / \ (MAXALIGN(SizeofHeapTupleHeader) + 2 * sizeof(ItemIdData))) * 2)) This accounts for the worst case of one redirect + one min-sized live heap tuple, and fills the page with it. Although impossible to put a page in such a state, that would be the worst case of live line pointers on a page. For the default BLCKSZ of 8kB, that results in 510 line pointers used-but-not-dead, an increase of ~ 70% over what's currently available. -Matthias