PostgreSQL: оценка продолжительности VACUUM FULL - PullRequest
0 голосов
/ 04 февраля 2020

Я унаследовал рабочую базу данных PostgreSQL с одной таблицей размером около 250 ГБ. В нем всего около десяти тысяч живых строк, которые, по моим оценкам, не превышают 20 МБ.

Таблица выросла до такого размера, потому что AUTOVACUUM был выключен в какой-то момент. (Я знаю, почему это было сделано. Он будет повторно активирован, и исходная проблема была исправлена, поэтому это , а не часть вопроса.)

Наша проблема в том, что многие запросы занимают довольно много времени. Например, SELECT count(*) FROM foo; занимает около 15 минут.

Теперь, рассмотрев другие варианты, я бы хотел запустить VACUUM FULL на столе. Я пытаюсь оценить продолжительность, которая потребуется для завершения, чтобы я мог спланировать окно обслуживания.

В моем понимании VACUUM FULL создает новую таблицу, копирует в нее все живые кортежи и заменяет исходную таблицу этой копировать.

По моим оценкам, этот процесс не займет намного больше времени, чем простой запрос, подобный приведенному выше в этой таблице, поскольку оперативные данные довольно малы по общему размеру и количеству.

Согласны ли вы с тем, что мои ожидания времени выполнения 'VACUUM FULL' как-то реализуются c? Если нет, то почему?

Существуют ли лучшие методы для оценки продолжительности VACUUM FULL?

1 Ответ

2 голосов
/ 04 февраля 2020

Единственную надежную оценку можно получить, восстановив резервную копию файловой системы на аналогичном компьютере и протестировав ее. Это то, что я бы порекомендовал.

Длительность будет зависеть не только от размера, но и от количества раздувания: если будет меньше реальных данных, это будет быстрее.

Это сказало Я бы попросил 2 часа на техническое обслуживание, которое должно быть достаточно для всего, кроме очень сомнительного оборудования.

...