Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PostgreSQL Новый топик    Ответить
 Большие таблицы и vacuum/autovacuum  [new]
flashgun
Member

Откуда:
Сообщений: 14
Добрый день!

Мой пет-проект в свободное от работы время плавно растёт, объём базы 350+ гигабайт, и три особенно большие таблицы, в 310, 350 и 110 млн строк начинают требовать от меня регулярного внимания. Две партиционированы на 16 частей по хешу, одна по году-месяцу. Во все таблицы идут insert/update. Примерно раз в месяц я вижу, что они как-то неприлично разрослись, тогда я вручную запускаю vacuum full, после чего всё опять летает.

При этом все параметры autovacuum стоят в дефолте, сам процесс непрерывно что-то вакуумит, работа кипит. Но я понимаю, что некоторые таблицы можно вообще не трогать неделями, а некоторые надо вообще говоря чистить весьма регулярно.

Короче, мне перестал нравиться автовакуум в том виде, в котором я наблюдаю его работу сейчас.

Перед тем, как погрузить своё сознание в пучину изучения тонкостей его настройки, хочу посоветоваться.

Не лучше ли будет для ряда больших таблиц отключить автовакуум вообще и написать набор костылей и подпорок, которые будут регулярно, в заданные мною окна, выполнять vacuum full? Не будет ли это "шагом назад"? Не слишком ли самонадеянно я посчитаю себя "умнее разработчиков постгрес", которые ни в коем случае не советуют отключать автовакуум?

Отключать я его и не планирую. Маленькие таблицы -- да бог с ними. А вот большие лучше бы я делал сам, вручную.

Согласны?
9 июл 20, 18:08    [22164788]     Ответить | Цитировать Сообщить модератору
 Re: Большие таблицы и vacuum/autovacuum  [new]
Melkij
Member

Откуда: Санкт-Петербург
Сообщений: 1111
Настраивайте автовакуум на более активную работу.

flashgun
непрерывно что-то вакуумит, работа кипит

Спит он непрерывно на дефолтных настройках, а не работает.

То что вакуумить не нужно - автовакуум трогать и не будет. (если вы конечно не на версиях до 9.6)
9 июл 20, 18:35    [22164798]     Ответить | Цитировать Сообщить модератору
 Re: Большие таблицы и vacuum/autovacuum  [new]
О-О-О
Member

Откуда: Нижний Новгород
Сообщений: 285
flashgun,
Я бы пошел другим путем.
Посмотрел бы сколько занимает чистая таблица, сколько занимает через неделю/месяц. и тогда бы уже думал.

Лично я очень активно мучаю таблицы и они вырастают раз в 50, но я делаю в конце кода перестройку таблицы.
Так же, по умолчанию, все таблицы создаются с наполнением (FilFactor) то ли 70, то ли 80%.
Можете поставить 100%, тогда пустого места не будет (таблицы пухнуть не будут), но при этом есть шанс, что снизится производительность (они будут слишком перемешаны).
Тут на помощь придет Cluster table по индексу. но в вашем случае что то трудно советовать - слишком много строк.
=======
Оператор CLUSTER указывает PostgreSQL кластеризовать таблицу, заданную параметром имя_таблицы, согласно индексу, заданному параметром имя_индекса. Указанный индекс уже должен быть
определён в таблице имя_таблицы.
В результате кластеризации таблицы её содержимое физически переупорядочивается в зависимости от индекса. Кластеризация является одноразовой операцией: последующие изменения в таблице нарушают порядок кластеризации. Другими словами, система не пытается автоматически
сохранять порядок новых или изменённых строк в соответствии с индексом. (Если такое желание
возникает, можно периодически повторять кластеризацию, выполняя команду снова. Кроме того,
если для заданной таблицы установить параметр FILLFACTOR меньше 100%, это может помочь сохранить порядок кластеризации при изменениях, так как изменяемые строки будут помещаться в
ту же страницу, если в ней достаточно места.)
.
9 июл 20, 21:47    [22164881]     Ответить | Цитировать Сообщить модератору
 Re: Большие таблицы и vacuum/autovacuum  [new]
flashgun
Member

Откуда:
Сообщений: 14
Спасибо, коллеги!

Хорошо, а если у меня таблица, которая партиционирована по месяцу-году, и я понимаю, что изменений в старые части вноситься уже не будут. Есть ли смысл поменять ей fillfactor и перестроить все индексы?
10 июл 20, 14:29    [22165285]     Ответить | Цитировать Сообщить модератору
 Re: Большие таблицы и vacuum/autovacuum  [new]
mefman
Member

Откуда:
Сообщений: 3053
flashgun
Спасибо, коллеги!

Хорошо, а если у меня таблица, которая партиционирована по месяцу-году, и я понимаю, что изменений в старые части вноситься уже не будут. Есть ли смысл поменять ей fillfactor и перестроить все индексы?

большого смысла нет. это очень уж тонкий тюнинг.
10 июл 20, 15:48    [22165363]     Ответить | Цитировать Сообщить модератору
 Re: Большие таблицы и vacuum/autovacuum  [new]
Maxim Boguk
Member

Откуда: Melbourne, Австралия
Сообщений: 4230
О-О-О

Так же, по умолчанию, все таблицы создаются с наполнением (FilFactor) то ли 70, то ли 80%.


Откуда такая странная информация? Никогда такого не было. 100% по умолчанию.
10 июл 20, 16:07    [22165377]     Ответить | Цитировать Сообщить модератору
 Re: Большие таблицы и vacuum/autovacuum  [new]
flashgun
Member

Откуда:
Сообщений: 14
Супер, спасибо!

Я увеличил checkpoint_timeout до 30 минут, max_wal_size до 30 гигабайт и checkpoint_completion_target до 0,93 согласно рекомендациям от https://www.2ndquadrant.com/en/blog/basics-of-tuning-checkpoints/ -- у меня с ними просто удивительно сошлись цифры.

И теперь вопрос: на в точности такой же сервер непрерывно идёт потоковая репликация. Я правильно понимаю, что на этом stand-by нет смысла возиться с настройкой автовакуума, но зато есть смысл изменить параметры про чекпоинты, как и выше по образцу?
11 июл 20, 23:59    [22165878]     Ответить | Цитировать Сообщить модератору
 Re: Большие таблицы и vacuum/autovacuum  [new]
Megabyte
Member

Откуда: ближайшее заМКАДье
Сообщений: 4903
Необходимо менять настройки autovacuum_vacuum_scale_factor, autovacuum_analyze_scale_factor, опционально autovacuum_max_workers.
По дефолту автовакуум работает слишком редко.
23 июл 20, 16:54    [22172545]     Ответить | Цитировать Сообщить модератору
 Re: Большие таблицы и vacuum/autovacuum  [new]
flashgun
Member

Откуда:
Сообщений: 14
Спасибо, автовакуум разогнался в несколько раз! Нагрузка на машину выросла, но скорость выполнения запросов при этом улучшилась. Теперь возникла другая проблема, чтобы не мешать, спрошу в другой теме.
26 июл 20, 14:56    [22173809]     Ответить | Цитировать Сообщить модератору
Все форумы / PostgreSQL Ответить