Re: COUNT(*) дофига весит

From: Maxim Boguk <mboguk(at)masterhost(dot)ru>
To: silly_sad <sad(at)bankir(dot)ru>
Cc: pgsql-ru-general(at)postgresql(dot)org
Subject: Re: COUNT(*) дофига весит
Date: 2008-04-17 07:51:46
Message-ID: 48070192.7050609@masterhost.ru
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-ru-general

silly_sad пишет:
> Alex Gorbachenko wrote:
>
>> silly_sad wrote:
>>
> >> и не понял, каким образом автовакуум избавит меня от необходимости
> >> FULL вакуума ?
>
> > тем, что он всё сделает за вас. причём при правильных настройках на
> > производительности всего остального его работа не скажется.
>
> делает ли он за меня FULL ? или каким-то образом делает FULL ненужным?

В нормальной ситуации правильно настроенный autovacuum действительно делает vacuum full ненужным.

По одной причине: vacuum помечает удаленные записи как место которое можно повторно использовать.
Если таблицу обновляется очень активно то за сутки между запусками vacuum full таблица успевает очень сильно разрастись.
Делать же ежеминутный просто vacuum не выгодно так как он будет vacuum всего подряд а не только тех таблиц которые обновились.
(а autovacuum отслеживает степень обновления таблиц).
Autovacuum просто не дают таблице распухать выше определенного предела так как свободное место будет отмечено и повторно использовано.
(как правило удается держать таблицы в неболее чем 2х кратном размере от минимально возможного).

Если у вас есть активнообновляемые таблицы то настройки могут выглядеть приблизительно так:
autovacuum = on
autovacuum_naptime = 1min
Остальные параметры пока можно не трогать.

PS: если у вас есть активное обновление я бы рекомендовал раз в неделю или месяц делать REINDEX DATABASE (так как индексы тоже имеют свойство распухать со временем)
Но Reindex так же блокирует доступ к таблице как и vacuum full.

PPS: надо понимать что просто vacuum (без full) не блокирует работу с таблицей и не сказывается на работоспособности сервиса...

PPPS: для работоспособности autovacuum надо не забывать включать (пре 8.3):
stats_start_collector = on
stats_block_level = on
stats_row_level = on
(на 8.3 просто надо указать: track_counts = on)

>
>>> Объясните пожалуйста, в чем разница между авто и еженочным vaccuum
>>> analyze?
>>
>> в том, что autovacuum проверяет количество измененных
>> записей в таблицах, и запускается в случае, если это количество
>> некоего числа. что позволяет "размазать" вакуум по времени. по моему в
>> документации это написано довольно подробно.
>
> Алгоритм запуска этой процедуры мне понятен.
> Мне непонятно каким образом частые вакуумы оказываются более
> эффективными в смысле очистки места чем ежесуточные.
>
> насколько я смог судить из документации автомат вызывает
> VACUUM.
> А меня сейчас спасает только VACUUM FULL (ежесуточного хватает).
> (Несколько таблиц очень интенсивно апдэйтятся)
>
>
>

--
Maxim Boguk

In response to

Responses

Browse pgsql-ru-general by date

  From Date Subject
Next Message silly_sad 2008-04-17 08:03:35 Re: COUNT(*) дофига весит
Previous Message Alexey Klyukin 2008-04-17 07:37:33 Re: COUNT(*) дофига весит