Механизмы очистки объектов
Предлагается три варианта очистки объектов:
- Команда SQL
VACUUM
: перебор всех версий хранимых в объекте записей, вычисление срока действия каждой из версий, разметка карты свободного пространства объекта. Не требует исключительной блокировки, не освобождает физическое дисковое пространство и блоки разделяемой памяти, не затрагивает структуру объектов. Пространство, помеченное как свободное во времяVACUUM
, может быть повторно использовано только под новые версии записей в том же объекте. - Фоновый процесс автоочистки: фоновые процессы, которые постепенно, небольшими порциями, параллельно с основной нагрузкой выполняют логику команды
VACUUM
. - Команда SQL
VACUUM FULL
илиCLUSTER
: физический перенос всех действующих записей из существующего объекта в новую копию, переключение между копиями, удаление старой копии объекта. Требует исключительной блокировки на все время операции.
Консольная утилита vacuumdb
- оболочка для команд VACUUM
, она облегчает запуск VACUUM
из операционной системы.
Недостаток VACUUM FULL
— полная блокировка обрабатываемой таблицы на все время обработки. Эту проблему в Pangolin решают утилита с расширением pg_repack
и расширение pg_squeeze
.
Результат их действий соответствует VACUUM FULL
, но исключительная блокировка не требуется на время перемещения данных — только на самый краткий момент смены идентификаторов дисковых файлов таблиц/индексов. Они значительно облегчают полное пересоздание объектов.