Re: COUNT(*) дофига весит - Mailing list pgsql-ru-general
From | Alexey Klyukin |
---|---|
Subject | Re: COUNT(*) дофига весит |
Date | |
Msg-id | 20080417073733.GA6868@vollmond Whole thread Raw |
In response to | Re: COUNT(*) дофига весит (silly_sad <sad@bankir.ru>) |
List | pgsql-ru-general |
silly_sad wrote: > Alex Gorbachenko wrote: > >> silly_sad wrote: > >> и не понял, каким образом автовакуум > избавит меня от необходимости > >> FULL вакуума ? > > > тем, что он всё сделает за вас. причём > при правильных настройках на > > производительности всего остального > его работа не скажется. > > делает ли он за меня FULL ? или каким-то > образом делает FULL ненужным? Основное направление разработки - как раз сделать FULL ненужным. По-сути обычный vacuum ничего не освобождает, он просто отмечает свободное место в таблице, состоящее из строк, которые уже не нужны (удалены и не видимы для транзакций). Т.е. после вызова VACUUM на диске таблица будет занимать столько же, сколько и до вызова, но дисковое пространство будет расходоваться более эффективно. > >>> Объясните пожалуйста, в чем разница >>> между авто и еженочным vaccuum >>> analyze? >> в том, что autovacuum проверяет количество >> измененных >> записей в таблицах, и запускается в >> случае, если это количество некоего >> числа. что позволяет "размазать" вакуум >> по времени. по моему в >> документации это написано довольно >> подробно. > > Алгоритм запуска этой процедуры мне > понятен. > Мне непонятно каким образом частые > вакуумы оказываются более эффективными > в смысле очистки места чем ежесуточные. Это достаточно просто показать на примере: Представь, что у тебя таблица занимает 100 Мб, из нее удаляется 50 мегабайт строк, после чего вставляется 100 мегабайт. Если сделать vacuum после последней вставки 100 мегабайт, то таблица будет занимать 200 мегабайт на диске (при удалении 50 мегабайт на самом деле никакого удаления не произошло, просто соотв. строки были отмечены особенным образом). Теперь во втором варианте, если вначале после удаления 50мб сделать vacuum, а потом вставить 100 мегабайт, то таблица будет занимать (условно говоря) 150 мегабайт, т.к. место, связанное с удаленными ячейками было отмечено командой vacuum как свободное и последующая вставка 100 мегабайт получила возможность его использовать. > > насколько я смог судить из документации > автомат вызывает > VACUUM. > А меня сейчас спасает только VACUUM FULL > (ежесуточного хватает). > (Несколько таблиц очень интенсивно > апдэйтятся) Попробуй сделать более агрессивный vacuum analyze. Вся прелесть autovacuum - в настраиваемых параметрах его работы, как уже было сказано вместо того, чтобы запускать обычный vacuum analyze _по_времени_ (например из cron-а) можно использовать количество "устаревших" строк таблицы и затюнить autovacuum под свои нужды. Вообще наиболее полно возможности autovacuum проявляются в 8.3: http://www.postgresql.org/docs/8.3/static/routine-vacuuming.html#AUTOVACUUM -- Alexey Klyukin http://www.commandprompt.com/ The PostgreSQL Company - Command Prompt, Inc.
pgsql-ru-general by date: