Сжатие 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.*.