Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Что делает full vacum? / 7 сообщений из 7, страница 1 из 1
31.07.2016, 07:14
    #39283381
azsx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что делает full vacum?
У меня есть таблица.
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
31.07.2016, 07:16
    #39283383
azsx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что делает full vacum?
зы
забыл добавить результат селекта сколько раз запись обновлялась при смене boolean
1 840 490
...
Рейтинг: 0 / 0
31.07.2016, 07:48
    #39283385
Alexius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что делает full vacum?
azsx,

а откуда вообще подозрение что база распухла? может там 70ГБ данных и есть. если toasted поле при update не меняется - строки в toast таблице не копируются (будет использован тот же oid, в самой таблице копия строки будет).
...
Рейтинг: 0 / 0
31.07.2016, 08:47
    #39283388
azsx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что делает full vacum?
автора откуда вообще подозрение что база распухла?
потому что я понять не могу. В моей базе тоаст - это хтмл код страниц, с ограничением не более 100 мб (чаще меньше). Размер какой угодно, идет только добавление уникальных страниц. Удаления нет совсем.
Мне писали, что если делать как я, то есть в эту же таблицу добавить часто изменяемые поля, например, zabral_1 boolean, то при каждом изменении этого поля проходит засорение таблицы данными, которые автовакумом чистятся только если эти записи сейчас в конце (хз в каком конце). Я провел полный вакум.
1. Значит данных так и есть 70 гб, раз ничего не почистилось, верно?
2. Почистить данные от апдейтов даже полным вакумом нельзя?
3. изменение полей буулеан на распухание таблицы от левых данных никак не влияет?
...
Рейтинг: 0 / 0
31.07.2016, 08:50
    #39283389
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что делает full vacum?
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
31.07.2016, 09:14
    #39283395
azsx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что делает full vacum?
модуль pgstattuple, к моему сожалению, у меня не установлен и понять как его устанавливать я не могу. Также я ваще не могу понять как модули в postgres устанавливаются.
Нет ли других методов?
Правильно ли я понял, что если имеем запись
char, text, boolean 1, boolean 2, boolean 3
и за всё время лишь иногда меняется boolean - то незанятое место не появляется?
...
Рейтинг: 0 / 0
31.07.2016, 10:24
    #39283404
Alexius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что делает full vacum?
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
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Что делает full vacum? / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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