Сжатие pg_toast на экземпляре RDS

У меня есть экземпляр Postgres 9.6 RDS, и он растет на 1 ГБ в день. Мы сделали некоторые оптимизации для отношения, связанного с pg_toast, но размер pg_toast не меняется.

Автовакуум включен, но, так как автовакуум /VACUUM FREEZE не освобождают пространство, а VACUUM FULL делает эксклюзивную блокировку, я больше не уверен, каков наилучший подход.

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

Какие другие варианты здесь, чтобы уменьшить pg_toast?

Вот некоторые данные о размерах таблицы. Вы можете видеть на первых двух изображениях, что отношение scoring_responsescore это отношение, связанное с pg_toast.

введите описание изображения здесьвведите описание изображения здесь

Настройки автовакуума

введите описание изображения здесь

Результаты текущего текущего процесса автоочистки для этого конкретного pg_toast. Это может помочь.введите описание изображения здесь

1 ответ

VACUUM (FULL) это единственный метод, который PostgreSQL предоставляет для уменьшения размера таблицы.

Является ли раздутый стол TOAST такой проблемой для вас? Доступ к таблицам TOAST всегда осуществляется через индекс TOAST, поэтому раздувание не должно быть проблемой производительности.

Я знаю о двух проектах, которые обеспечивают реорганизацию таблиц с коротким ACCESS EXCLUSIVE блокировка, а именно pg_squeeze и pg_repack, но вы, вероятно, не сможете использовать их в базе данных Amazon RDS.

Чтобы проблема не усугубилась, сначала попытайтесь поднять autovacuum_vacuum_cost_limit до 2000 для затронутой таблицы, и если это не сработает, уменьшите autovacuum_vacuum_cost_delay до 0. Вы можете использовать ALTER TABLE изменить настройки для одной таблицы.

Pg _repack по-прежнему не позволяет уменьшить размер сегментов TOAST в RDS. А в RDS мы не можем запускать pg_repack с привилегиями суперпользователя, мы должны использовать параметр "--no-superuser-check". При этом он не сможет получить доступ к таблицам pg_toast.*.

Другие вопросы по тегам