Thread: MaxOffsetNumber versus MaxHeapTuplesPerPage
Is there any reason to have both these macros? By my opinion MaxHeapTuplesPerPage is more accurate and it should replace all MaxOffsetNumber occurrence. Any comments? Zdenek http://doxygen.postgresql.org/htup_8h.html#c8829334a53a69e12b070bf09b7b7ab7 http://doxygen.postgresql.org/off_8h.html#fc094b61f53a883c7a24bc152382cd31
Zdenek Kotala wrote: > Is there any reason to have both these macros? By my opinion > MaxHeapTuplesPerPage is more accurate and it should replace all > MaxOffsetNumber occurrence. We use MaxOffsetNumber with index pages as well. At quick glance, the only places I can see where we could replace MaxOffsetNumber with MaxHeapTuplesPerPage, are in vacuum.c and vacuumlazy.c, where we allocate arrays big enough to hold potentially a full page's worth of tuples. We could change those, but it's hardly worth the trouble. -- Heikki Linnakangas EnterpriseDB http://www.enterprisedb.com
Heikki Linnakangas wrote: > Zdenek Kotala wrote: >> Is there any reason to have both these macros? By my opinion >> MaxHeapTuplesPerPage is more accurate and it should replace all >> MaxOffsetNumber occurrence. > > We use MaxOffsetNumber with index pages as well. I forgot to indexes, but there is MaxIndexTuplesPerPage which is also better estimation for indexes. > At quick glance, the only places I can see where we could replace > MaxOffsetNumber with MaxHeapTuplesPerPage, are in vacuum.c and > vacuumlazy.c, where we allocate arrays big enough to hold potentially a > full page's worth of tuples. We could change those, but it's hardly > worth the trouble. Yes, it is a cleanup (maybe reduce some memory requirements), but I think is better to reduce different macros to avoid future problem, when somebody forget changes all of these macros. Zdenek
Heikki Linnakangas <heikki@enterprisedb.com> writes: > Zdenek Kotala wrote: >> Is there any reason to have both these macros? By my opinion >> MaxHeapTuplesPerPage is more accurate and it should replace all >> MaxOffsetNumber occurrence. > We use MaxOffsetNumber with index pages as well. > At quick glance, the only places I can see where we could replace > MaxOffsetNumber with MaxHeapTuplesPerPage, are in vacuum.c and > vacuumlazy.c, where we allocate arrays big enough to hold potentially a > full page's worth of tuples. We could change those, but it's hardly > worth the trouble. There is also a difference in intent: MaxOffsetNumber is selected so that it's physically impossible to have more than that many offsets on a page, and so it's safe to use an array sized that way without any overflow checks. MaxHeapTuplesPerPage is the most that *should* be there but one can think of corner cases where there could be more (eg, limit on number of redirect pointers hasn't been enforced correctly, not to mention flat-out corrupt page). If there is any code using MaxHeapTuplesPerPage as an array size and not backstopping it with an explicit overflow check, that would be a bug IMHO. regards, tom lane