Re: Why not represent "never vacuumed" accurately wrtpg_class.relpages?

Поиск
Список
Период
Сортировка
От Andres Freund
Тема Re: Why not represent "never vacuumed" accurately wrtpg_class.relpages?
Дата
Msg-id 20181211185105.nok3q7yxntcd3dga@alap3.anarazel.de
обсуждение исходный текст
Ответ на Re: Why not represent "never vacuumed" accurately wrt pg_class.relpages?  (Tom Lane <tgl@sss.pgh.pa.us>)
Ответы Re: Why not represent "never vacuumed" accurately wrt pg_class.relpages?  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-hackers
Hi,

On 2018-12-11 13:43:47 -0500, Tom Lane wrote:
> Andres Freund <andres@anarazel.de> writes:
> > On 2018-12-11 09:47:38 -0500, Tom Lane wrote:
> >> And why do you blame it on this representation?  We don't believe that
> >> relpages is the actual size of the table.
> 
> > No, but we assume that there's 10 pages. Even if both relpages and the
> > actual relation stats say there's not. And we assume there's as many
> > tuples on the page as can fit on it, using get_rel_data_width().  So if
> > you have a small table with a handful of entries at most, you suddenly
> > get estimates of a few hundred to ~a thousand rows.
> 
> That's intentional, and not particularly constrained by the representation
> used in pg_class.  The downsides of incorrectly assuming a table is tiny
> are a lot worse than those of assuming the opposite.

How's being unable to distinguish "never vacuumed" from "table is
knowingly empty right now" not constrained by the representation?  I
mean:
             * We approximate "never vacuumed" by "has relpages = 0", which
             * means this will also fire on genuinely empty relations.  Not
             * great, but fortunately that's a seldom-seen case in the real
             * world, and it shouldn't degrade the quality of the plan too
             * much anyway to err in this direction.
             *
             * There are two exceptions wherein we don't apply this heuristic.
             * One is if the table has inheritance children.  Totally empty
             * parent tables are quite common, so we should be willing to
             * believe that they are empty.  Also, we don't apply the 10-page
             * minimum to indexes.

My case of small tables of ephemeral data aside, with hash & range
partitioning it's becoming more common to have individual tables be
empty too, by virtue of nothing falling into the range/being hashed of
the partitions.

Without having a separate "no page, but really" value, how can we fix
this?

Greetings,

Andres Freund


В списке pgsql-hackers по дате отправления:

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: Why not represent "never vacuumed" accurately wrt pg_class.relpages?
Следующее
От: Tom Lane
Дата:
Сообщение: Re: Why not represent "never vacuumed" accurately wrt pg_class.relpages?