Обсуждение: gincostestimate

Поиск
Список
Период
Сортировка

gincostestimate

От
Jeff Janes
Дата:
Dear Hackers,

A gin index created on an initially empty table will never get used
until the table is vacuumed, which for a table with no update or
delete activity could be forever unless someone manually intervenes.


The problem is that numEntries in src/backend/utils/adt/selfuncs.c is
zero and eventually causes a division by zero and a cost estimate of
nan.

The code below does not save the day, because nTotalPages and
nEntryPages are 2 and 1 respectively when an index is created on an
empty table, or when an indexed table is truncated.
   if (ginStats.nTotalPages == 0 || ginStats.nEntryPages == 0)   {       numEntryPages = numPages;       numDataPages =
0;      numEntries = numTuples;     /* bogus, but no other info available */   }
 

I don't know what the solution is.  Simply setting numEntries to 1 if
ginStats.nEntries zero solves this particular problem, but I don't
know what other consequences it might have.

Cheers,

Jeff


Re: gincostestimate

От
Tom Lane
Дата:
Jeff Janes <jeff.janes@gmail.com> writes:
> The problem is that numEntries in src/backend/utils/adt/selfuncs.c is
> zero and eventually causes a division by zero and a cost estimate of
> nan.
> ...
> I don't know what the solution is.  Simply setting numEntries to 1 if
> ginStats.nEntries zero solves this particular problem, but I don't
> know what other consequences it might have.

Yeah, I think clamping numEntries to a minimum value of 1 is a
reasonable thing to do.  Will fix.
        regards, tom lane