Re: Autovacuum not keeping up. (PG 9.2.9)

Поиск
Список
Период
Сортировка
От Alvaro Herrera
Тема Re: Autovacuum not keeping up. (PG 9.2.9)
Дата
Msg-id 20140731134025.GB5475@eldon.alvh.no-ip.org
обсуждение исходный текст
Ответ на Autovacuum not keeping up. (PG 9.2.9)  (jesper@krogh.cc)
Ответы Re: Autovacuum not keeping up. (PG 9.2.9)
Re: Autovacuum not keeping up. (PG 9.2.9)
Список pgsql-admin
jesper@krogh.cc wrote:
> Hi.
>
> I have a large  database with a message queue table, that has high
> activity. The database supports 1-300 client connection concurrently,
>  having transactions open in up to 30 minutes each.
>
> Recently I am seeing autuvacuum being issued, but it takes
> ages to get through the message queue table, with strace showing waiting
> for semop's for 10's to 100's of seconds.

Do you have data on how relfrozenxid advances for that table?

Vacuuming needs to grab a "cleanup lock" on each page it's going to
vacuum, which is a special kind of lock that requires that no other
process is even looking at the page at that moment (we call this "to
have the page pinned"), which is even weaker than having a shared lock
on the page.  If traffic to some pages is high, it might be difficult
for vacuum to acquire this.

Normally, vacuum doesn't break much sweat about this: if it cannot
acquire the cleanup lock, it ignores the page, keeps calm and carries
on.  But if it's a for-wraparound vacuuming, it will need to wait until
it is able to acquire cleanup lock.

I think one idea might be to try to manually vacuum the table once in a
while with a reduced value of min_freeze_table_age.  This will cause a
full table scan (i.e. cleanup lock for all pages is waited for), which
decreases the "frozen xid age", which moves the need to do this again
further in the future; so the autovacuum-invoked vacuums will be able to
skip the pages on which it cannot get cleanup lock.

Another idea is to increase min_freeze_table_age for the queue table
through ALTER TABLE, the idea being that you can delay forced vacuuming
of hot pages for long enough that they can wait until they have cooled
off.  Default value is 150 million transactions, which you can raise
tenfold and even higher.

See
http://www.postgresql.org/docs/9.2/static/runtime-config-client.html#GUC-VACUUM-FREEZE-TABLE-AGE


The other idea is that heap truncation is what's causing the problem,
but AFAICS that uses conditional lock acquisition so you shouldn't be
seeing stalls in semop().

--
Álvaro Herrera                http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services


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

Предыдущее
От: jesper@krogh.cc
Дата:
Сообщение: Autovacuum not keeping up. (PG 9.2.9)
Следующее
От: jayknowsunix@gmail.com
Дата:
Сообщение: Re: Autovacuum not keeping up. (PG 9.2.9)