Назад | Перейти на главную страницу

Верните дисковое пространство из Postgresql

У меня есть одна база данных на сервере Linux, которая имеет огромное количество данных. Из-за операции обновления и удаления он занял большую часть моего жесткого диска. Основная причина в том, что используемая нами версия (8.1) не имеет периодического процесса автоочистки. Чтобы решить эту проблему, я поместил Vacum в определенную таблицу, команда Vacum работала более 15 часов и продолжает работать. Поэтому я просто остановил выполнение Vacum, поскольку другой процесс не мог получить доступ к этой таблице в течение 15 часов.

Есть ли способ решить эту проблему и вернуть память, не мешая другим процессам.

Спасибо

Вы можете дать CLUSTER (док здесь) попробуйте - перепишет и сожмет всю таблицу. Пока VACUUM FULL Является ли это на месте, CLUSTER выполняет свою работу, записывая во второй файл и переключает файлы после заданий.

Это имеет некоторые преимущества и некоторые недостатки:

  • Это намного быстрее, чем VACUUM FULL,
  • ему нужно больше места для хранения во время работы (второй файл таблицы),
  • для этого требуется ЭКСКЛЮЗИВНАЯ блокировка таблицы.

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

И, пожалуйста, поищите более подробную информацию в списках рассылки PostgreSQL.

Версия 8.1 - это конец жизненного цикла по состоянию на ноябрь 2010 года. Вам необходимо обновить до более новой версии, 8.3 или более поздней. Версия 8.2 также будет прекращена через несколько месяцев.

VACUUM FULL нуждается в блокировке таблицы, она получила блокировку или просто ждала 15 часов, чтобы получить ее? VACUUM FULL - единственный способ освободить место на диске.

Версия 8.1 имеет auto_vacuum, он был представлен в этой версии:

Начиная с PostgreSQL 8.1, существует отдельный необязательный серверный процесс, называемый демоном автоочистки, целью которого является автоматизация выполнения команд VACUUM и ANALYZE.

Включите его или выполните ВАКУУМ вручную (без ПОЛНОЙ) через определенный промежуток времени.

Если долг VACUUM действительно настолько велик, восстановление из резервной копии pg_dump также будет вариантом. И это ориентировочно близко к обновлению до 8.4 или выше.