В некоторых случаях, и после создания массива update, insertили deleteиз таблицы, я начал, VACUUM FULL ANALYZEчтобы убедиться, что БД не стала слишком раздутой. Выполнение этого в производственной базе данных позволило мне обнаружить, что это не очень хорошая идея, потому что я мог заблокировать таблицу на длительный период времени. Итак, я отменил процесс, может быть, попробовал просто VACUUM(не полный) или позвольте AUTOVACUUMсделать позже все, что он может сделать.
Вопрос заключается в следующем: если я остановлю VACUUM или AUTOVACUUM на полпути, потеряна ли уже вся обработка?
Например, если VACUUMуже найдено 1 М мертвых строк, и я остановил это, вся эта информация потеряна? Работает ли VACUUM полностью транзакционным способом («все или ничего», как очень большое количество процессов PostgreSQL)?
Если VACUUM можно безопасно прервать без потери всей работы, есть ли способ сделать vacuumработу постепенно? [Работать в течение 100 мс, остановиться, подождать 10 мс, чтобы разрешить неблокирование остального мира ... и т. Д.]. Я знаю, что вы можете сделать часть этого, настраивая параметры автоочистки, но я думаю о том, чтобы иметь возможность программно управлять этим, чтобы иметь возможность делать это в определенное время / при определенных условиях.
ПРИМЕЧАНИЕ. Остановить / отменить / убить процесс означает в этом контексте:
- При использовании pgAdmin нажмите кнопку «Отменить запрос».
- Если вы работаете программно, вызовите pg_cancel_backend ().
Я предполагаю, что оба эквивалентны. Я не использовал команду уничтожения на уровне оболочки или системы.