powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Что делает full vacum?
7 сообщений из 7, страница 1 из 1
Что делает full vacum?
    #39283381
azsx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня есть таблица.
id_data bigint NOT NULL DEFAULT nextval('ind_data_id_ind_data_seq'::regclass),
md5_data character(32) NOT NULL,
data_data text,
zabral_1 boolean NOT NULL DEFAULT false,
zabral_2 boolean,
zabral_3 boolean
Получается я ошибся при проектировании. Каждую запись надо долго обрабатывать, я поставил поля boolean когда обработка проходит, я туда труе пишу. Как я читаю на форуме получается, что при этом копируется вся запись целиком а старое место остается незанятым и редко когда целиком займется. Соответственно база пухнет.
SELECT count(1) FROM my_tabl WHERE zabral_1 OR zabral_2 OR zabral_33;

Строк 6 391 150, размер сначала (сгоряча) посмотрел только в pgadmin было: таблица 1568 мб, toast 69gb, индексы 857. Я провел обслуживание full (как я понимаю full vacum) делалось часа три, наверное, всех отключил нафиг. написал сообщение, типа почистил 1500 записей, хотя не понятно как, я вроде ничо не удалял. В итоге таблица 1559 мб, toast 70gb, индексы 360(857) мб.
Вопрос, так что же делает full? В моем случае он просто реиндекс сделал за три часа, круто, чо...
Более важный вопрос, как сжать таблицу?
...
Рейтинг: 0 / 0
Что делает full vacum?
    #39283383
azsx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зы
забыл добавить результат селекта сколько раз запись обновлялась при смене boolean
1 840 490
...
Рейтинг: 0 / 0
Что делает full vacum?
    #39283385
Alexius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
azsx,

а откуда вообще подозрение что база распухла? может там 70ГБ данных и есть. если toasted поле при update не меняется - строки в toast таблице не копируются (будет использован тот же oid, в самой таблице копия строки будет).
...
Рейтинг: 0 / 0
Что делает full vacum?
    #39283388
azsx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автора откуда вообще подозрение что база распухла?
потому что я понять не могу. В моей базе тоаст - это хтмл код страниц, с ограничением не более 100 мб (чаще меньше). Размер какой угодно, идет только добавление уникальных страниц. Удаления нет совсем.
Мне писали, что если делать как я, то есть в эту же таблицу добавить часто изменяемые поля, например, zabral_1 boolean, то при каждом изменении этого поля проходит засорение таблицы данными, которые автовакумом чистятся только если эти записи сейчас в конце (хз в каком конце). Я провел полный вакум.
1. Значит данных так и есть 70 гб, раз ничего не почистилось, верно?
2. Почистить данные от апдейтов даже полным вакумом нельзя?
3. изменение полей буулеан на распухание таблицы от левых данных никак не влияет?
...
Рейтинг: 0 / 0
Что делает full vacum?
    #39283389
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
azsxУ меня есть таблица.
id_data bigint NOT NULL DEFAULT nextval('ind_data_id_ind_data_seq'::regclass),
md5_data character(32) NOT NULL,
data_data text,
zabral_1 boolean NOT NULL DEFAULT false,
zabral_2 boolean,
zabral_3 boolean
Получается я ошибся при проектировании. Каждую запись надо долго обрабатывать, я поставил поля boolean когда обработка проходит, я туда труе пишу. Как я читаю на форуме получается, что при этом копируется вся запись целиком а старое место остается незанятым и редко когда целиком займется. Соответственно база пухнет.
SELECT count(1) FROM my_tabl WHERE zabral_1 OR zabral_2 OR zabral_33;

Строк 6 391 150, размер сначала (сгоряча) посмотрел только в pgadmin было: таблица 1568 мб, toast 69gb, индексы 857. Я провел обслуживание full (как я понимаю full vacum) делалось часа три, наверное, всех отключил нафиг. написал сообщение, типа почистил 1500 записей, хотя не понятно как, я вроде ничо не удалял. В итоге таблица 1559 мб, toast 70gb, индексы 360(857) мб.
Вопрос, так что же делает full? В моем случае он просто реиндекс сделал за три часа, круто, чо...
Более важный вопрос, как сжать таблицу?

перед vacuum full имеет смысл сделать pgstattuple() на саму таблицу и на toast чтобы понять что там с незанятым местом.
Вполне может быть что у вас ничего и не распухло особо (особенно если долгих транзакций не было а записи обновляются 2-4 раза за время жизни а не 2000-4000+ раз).

--
Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
Что делает full vacum?
    #39283395
azsx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
модуль pgstattuple, к моему сожалению, у меня не установлен и понять как его устанавливать я не могу. Также я ваще не могу понять как модули в postgres устанавливаются.
Нет ли других методов?
Правильно ли я понял, что если имеем запись
char, text, boolean 1, boolean 2, boolean 3
и за всё время лишь иногда меняется boolean - то незанятое место не появляется?
...
Рейтинг: 0 / 0
Что делает full vacum?
    #39283404
Alexius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
azsx,

pgstattuple есть в contrib. если он поставлен, то просто сделать create extension pgstattuple.

еще раз: при update строки создается ее копия в таблице. значения полей, размер которых больше 2кб хранятся в отдельной toast таблице. в самой таблице вместо значения поля хранится chunk id, по которому это значение можно из toast таблицы собрать из кусков по 2кб. если при update toasted поля не менялись, то в toast таблице никаких изменений не будет. подробнее про toast см. документацию :

During an UPDATE operation, values of unchanged fields are normally preserved as-is; so an UPDATE of a row with out-of-line values incurs no TOAST costs if none of the out-of-line values change.

vacuum full может освободить место, занимаемое ненужными копиями строк (или свободное место внутри таблиц). он просто создает копию таблицы без лишнего мусора и удаляет старую таблицу.

если автовакуум работает, не было массового обновления data_data, не было массового удаления строк из таблицы, не было большого числа обновлений data_data во время длинной транзакции то пухнуть сильно не должно.

рекомендуется посмотреть размеры самых длинных data_data, например top 100 самых длинных значений в таблице. могут быть сюрпризы. хотя вот в среднем получается 10кб на запись, что может быть нормально для html страниц (не факт что они сжиматься будут в toast).
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Что делает full vacum?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]