Re: pgsql: Move btbulkdelete's vacuum_delay_point()

Поиск
Список
Период
Сортировка
От Simon Riggs
Тема Re: pgsql: Move btbulkdelete's vacuum_delay_point()
Дата
Msg-id 1140018743.12131.21.camel@localhost.localdomain
обсуждение исходный текст
Ответ на Re: pgsql: Move btbulkdelete's vacuum_delay_point()  (Tom Lane <tgl@sss.pgh.pa.us>)
Ответы Re: pgsql: Move btbulkdelete's vacuum_delay_point()  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-committers
On Tue, 2006-02-14 at 17:13 -0500, Tom Lane wrote:
> Simon Riggs <simon@2ndquadrant.com> writes:
> > Perhaps if vacuum_delay_point() contained a timer check, we'd be able to
> > see if any gap between vacuum delays was more than the actual delay
> > itself. It would be nice to know they are all gone, forever.
>
> vacuum_delay_point is intended to be cheap enough (in the non-delay
> case) that no one would have any hesitation about dropping it into
> loops.  With a timer check in there, that might not be true, so I'm
> resistant to doing it unconditionally.  But I could see having some
> #ifdef'd code that could be conditionally compiled in to measure the
> maximum inter-delay-point time in a development build.

I'm thinking something like this might work better, since this is the
issue I/we really care about:

   if (LWLockNumHeldByMe() == 0)
       pg_usleep(msec * 1000L);
   else
        elog(WARNING, "losing sleep because internal locks are held");

or is it not worth losing sleep over? ;-)

The additional code is only executed *if* we are going to sleep, so a
few extra cycles won't hurt when we are just about to sleep for at least
10 milliseconds.

We could make similar checks at most of the other sleep locations,
modifying the number of held locks appropriately.

Best Regards, Simon Riggs


Вложения

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

Предыдущее
От: jwp@pgfoundry.org (James William Pye)
Дата:
Сообщение: python - be: Add and use interface to deleting function cache entries.
Следующее
От: Tom Lane
Дата:
Сообщение: Re: pgsql: Move btbulkdelete's vacuum_delay_point()