Accept slightly-filled pages for tuples larger than fillfactor.
authorNoah Misch <noah@leadboat.com>
Wed, 31 Mar 2021 01:53:44 +0000 (18:53 -0700)
committerNoah Misch <noah@leadboat.com>
Wed, 31 Mar 2021 01:53:44 +0000 (18:53 -0700)
commit0ff8bbdee19a9db2794a95d439c946ab017d0acd
tree211fe7404fe33f07e70f8126b768b5404020e421
parent7ef64e7e72a65f191fc2f7d4bbe220f53dd8d5de
Accept slightly-filled pages for tuples larger than fillfactor.

We always inserted a larger-than-fillfactor tuple into a newly-extended
page, even when existing pages were empty or contained nothing but an
unused line pointer.  This was unnecessary relation extension.  Start
tolerating page usage up to 1/8 the maximum space that could be taken up
by line pointers.  This is somewhat arbitrary, but it should allow more
cases to reuse pages.  This has no effect on tables with fillfactor=100
(the default).

John Naylor and Floris van Nee.  Reviewed by Matthias van de Meent.
Reported by Floris van Nee.

Discussion: https://postgr.es/m/6e263217180649339720afe2176c50aa@opammb0562.comp.optiver.com
src/backend/access/heap/hio.c
src/backend/access/heap/rewriteheap.c
src/test/regress/expected/insert.out
src/test/regress/sql/insert.sql