Я унаследовал рабочую базу данных PostgreSQL с одной таблицей размером около 250 ГБ. В нем всего около десяти тысяч живых строк, которые, по моим оценкам, не превышают 20 МБ.
Таблица выросла до такого размера, потому что AUTOVACUUM
был выключен в какой-то момент. (Я знаю, почему это было сделано. Он будет повторно активирован, и исходная проблема была исправлена, поэтому это , а не часть вопроса.)
Наша проблема в том, что многие запросы занимают довольно много времени. Например, SELECT count(*) FROM foo;
занимает около 15 минут.
Теперь, рассмотрев другие варианты, я бы хотел запустить VACUUM FULL
на столе. Я пытаюсь оценить продолжительность, которая потребуется для завершения, чтобы я мог спланировать окно обслуживания.
В моем понимании VACUUM FULL
создает новую таблицу, копирует в нее все живые кортежи и заменяет исходную таблицу этой копировать.
По моим оценкам, этот процесс не займет намного больше времени, чем простой запрос, подобный приведенному выше в этой таблице, поскольку оперативные данные довольно малы по общему размеру и количеству.
Согласны ли вы с тем, что мои ожидания времени выполнения 'VACUUM FULL' как-то реализуются c? Если нет, то почему?
Существуют ли лучшие методы для оценки продолжительности VACUUM FULL
?