Pull to refresh

Comments 6

Первые 2 шага (смена типа и пересоздание табицы) можно объединить, это автоматизировано, например, в https://github.com/comagic/transparent_alter_type

Приложение работает с БД как обычно, но когда (почти) все изменения захвачены и применены к новой таблице - берётся короткая эксклюзивная блокировка, доприменяются изменения и происходит подмена таблиц.

зачем изобретать скрипты для неблокирующего VACUUM FULL, когда есть pg_repack?

Если вы сделаете тюнинг вакуума и своей БД возможно вам просто не понадобится использование pg_repack. Агрессивный автовакуум + похудение на проблемне таблицы - это что то вроде диеты и ЛФК. А pg_repack и другие подобные вещи - уже ближе к пластической хирургии с липосакцией.

По поводу vacuum - есть утилита pg-repack (https://github.com/reorg/pg_repack) которая обслуживает таблицы без долгого глобального лока. Она оттестирована, и лучше использовать её вместо своих велосипедов.

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

По поводу вакуумма - тут показан лишь один из способов, вполне можно использовать сторонние утилиты. Основная идея - сразу не брать сторонний инструмент который возможно будет оверхедом, а сделать тюнинг текущего процесса вакумации и убить "жировички". Зачастую агрессивный автовакуум - вполне может вас выручить.

А про партиционирование, да это сложная вещь, и ее нужно применять с умом, сегодня у тебя не было уникального индекса на какое то поле - а завтра он появится(или еще хуже исчезнет) и все, твой хитрый план выпросить премию у СТО за оптимизацию летит в тартатары. Поэтому это ни в коем случае не рекомендация к применению, это лишь один вариант из мультивселенной безумия.

Sign up to leave a comment.