Re: vac truncation scan problems

Поиск
Список
Период
Сортировка
От Kyotaro HORIGUCHI
Тема Re: vac truncation scan problems
Дата
Msg-id 20150331.172835.209239965.horiguchi.kyotaro@lab.ntt.co.jp
обсуждение исходный текст
Ответ на Re: vac truncation scan problems  (Jeff Janes <jeff.janes@gmail.com>)
Ответы Re: vac truncation scan problems  (Jeff Janes <jeff.janes@gmail.com>)
Re: vac truncation scan problems  (Alvaro Herrera <alvherre@2ndquadrant.com>)
Список pgsql-hackers
Hi, this is a bug in the commit 0d831389749a3baaced7b984205b9894a82444b9 .

It allows vucuum freeze to be skipped and inversely lets regular
vacuum wait for lock. The attched patch fixes it.


In table_recheck_autovac, vacuum options are determined as following,
>     tab->at_vacoptions = VACOPT_SKIPTOAST |>         (dovacuum ? VACOPT_VACUUM : 0) |>         (doanalyze ?
VACOPT_ANALYZE: 0) |
 
!>         (wraparound ? VACOPT_NOWAIT : 0);

The line prefixed by '!' looks inverted.

At Mon, 30 Mar 2015 23:42:51 -0700, Jeff Janes <jeff.janes@gmail.com> wrote in
<CAMkU=1xmTEiaY=5oMHsSQo5vd9V1Ze4kNLL0qN2eH0P_GXOaYw@mail.gmail.com>
jeff.janes> On Mon, Mar 30, 2015 at 8:54 PM, Jeff Janes <jeff.janes@gmail.com> wrote:
> > But the perversity is that that conflicting lock request can only be
> > coming, as far as I can tell, from the autovac process.  I'm not sure how
> > this happens, as I thought autovac never waited for locks but only obtained
> > one if it were instantaneously available, but that it is the only
> > explanation I can think of.
> >
> > I'm not seeing this in 9.4, but I'm not sure how deterministic it is so
> > maybe that is just luck.
> >

Good catch!

> It looks like the culprit is this:
> 
> commit 0d831389749a3baaced7b984205b9894a82444b9
> Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
> Date:   Wed Mar 18 11:52:33 2015 -0300
> 
>     Rationalize vacuuming options and parameters
> 
> I'd guess the autovac nature of the autovac process is getting lost in
> there where, but I don't see where.

You're right, the patch does something like following,


+        tab->at_vacoptions = VACOPT_SKIPTOAST |
+            (dovacuum ? VACOPT_VACUUM : 0) |
+            (doanalyze ? VACOPT_ANALYZE : 0) |
+            (wraparound ? VACOPT_NOWAIT : 0);
..
-    if (!tab->at_wraparound)
-        vacstmt.options = VACOPT_NOWAIT;

This inverses the meaning of at_wraparound. No previous version
isn't affected by this.

regards,

-- 
Kyotaro Horiguchi
NTT Open Source Software Center

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

Предыдущее
От: Michael Paquier
Дата:
Сообщение: Re: pg_rewind tests
Следующее
От: Michael Paquier
Дата:
Сообщение: Re: vac truncation scan problems