Re: BUG #10542: infinite loop in index.c when trying to reindex system tables (probably corrupted db state)

Поиск
Список
Период
Сортировка
От hannes.janetzek@gmail.com
Тема Re: BUG #10542: infinite loop in index.c when trying to reindex system tables (probably corrupted db state)
Дата
Msg-id CA+jkZB3JhjKt2=ie=0gcixo2-37gM+fMKfGpcaRe5MMLC6nA-Q@mail.gmail.com
обсуждение исходный текст
Ответ на Re: BUG #10542: infinite loop in index.c when trying to reindex system tables (probably corrupted db state)  (Andres Freund <andres@2ndquadrant.com>)
Ответы Re: BUG #10542: infinite loop in index.c when trying to reindex system tables (probably corrupted db state)  (Andres Freund <andres@2ndquadrant.com>)
Список pgsql-bugs
Hi,


On Fri, Jun 6, 2014 at 6:34 PM, Andres Freund <andres@2ndquadrant.com>
wrote:

> Hi,
>
> On 2014-06-05 23:00:56 +0000, hannes.janetzek@gmail.com wrote:
> > While trying to get our database working again after a forced shutdown
> the
> > reindexing of the system tables in single user mode went into an infinite
> > loop.
>
> what happened in that infinite loop? The log excerpt below doesn't show
> one? Is it constantly echoing a message?
>

there were no messages from postgres while looping. I attached gdb and
stepped through the lines and found the range around L2260-L2385 repeating.
perf also showed only activity below IndexBuildHeapScan while tracing for a
few minutes. From looking at the source my guess was that a tuple that is
being indexed has a stale 'about-to-be-deleted-state'.  The *very* well
documented source states that 'we wait for the deleting transaction to
finish and check again' I wonder if a deleting transaction can be in
progress in single-user-mode while reindex in running - Though I really
don't have any clue about pg internals :)


> could you explain how you got into the bad state? Are you using
> fsync=off?
>


Yes, the instance was running without fsync. We use it for rendering
openstreetmap map tiles so content is not that critical.


Regards,
Hannes


> > I can just roughly guess that between the lines:
> >
> https://github.com/postgres/postgres/blob/REL9_3_STABLE/src/backend/catalog/index.c#L2260-
> > L2385
> > the function is assuming that another process tries to delete a tuple
> that
> > is about to be indexed (even though in single user mode this should
> probably
> > not be possible)
>
> We've recently fixed a bug around that - but I don't immediately see how
> it could be applicable in that scenario.
>
>



> Greetings,
>
> Andres Freund
>
> --
>  Andres Freund                     http://www.2ndQuadrant.com/
>  PostgreSQL Development, 24x7 Support, Training & Services
>



--
Hannes

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

Предыдущее
От: Kevin Grittner
Дата:
Сообщение: Re: uninterruptable loop: concurrent delete in progress within table
Следующее
От: zhangzq
Дата:
Сообщение: Many processes blocked at ProcArrayLock!