Re: Should heapam_estimate_rel_size consider fillfactor?
Peter Eisentraut <peter@eisentraut.org>
From: Peter Eisentraut <peter@eisentraut.org>
To: Corey Huinker <corey.huinker@gmail.com>,
Tomas Vondra <tomas.vondra@enterprisedb.com>
Cc: PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2023-07-03T06:46:00Z
Lists: pgsql-hackers
On 14.06.23 20:41, Corey Huinker wrote: > So maybe we should make table_block_relation_estimate_size smarter to > also consider the fillfactor in the "no statistics" branch, per the > attached patch. > > > I like this a lot. The reasoning is obvious, the fix is simple,it > doesn't upset any make-check-world tests, and in order to get a > performance regression we'd need a table whose fillfactor has been > changed after the data was loaded but before an analyze happens, and > that's a narrow enough case to accept. > > My only nitpick is to swap > > (usable_bytes_per_page * fillfactor / 100) / tuple_width > > with > > (usable_bytes_per_page * fillfactor) / (tuple_width * 100) > > > as this will eliminate the extra remainder truncation, and it also gets > the arguments "in order" algebraically. The fillfactor is in percent, so it makes sense to divide it by 100 first before doing any further arithmetic with it. I find your version of this to be more puzzling without any explanation. You could do fillfactor/100.0 to avoid the integer division, but then, the comment above that says "integer division is intentional here", without any further explanation. I think a bit more explanation of all the subtleties here would be good in any case.
Commits
-
Correct relation size estimate with low fillfactor
- 587b6aa3f3ce 17.5 landed
- 9ba7bcc894f1 18.0 landed
-
Consider fillfactor when estimating relation size
- 29cf61ade3f2 17.0 landed