Я управляю большой (несколько сотен гигов) базой данных, содержащей таблицы с различными ролями, некоторые из которых содержат миллионы записей. Некоторые таблицы получают только большое количество вставок и удалений, другие - только несколько вставок и большое количество обновлений.
База данных работает на PostgreSQL 8.4 в системе Debian 6.0 amd64 с 16 гигабайтами оперативной памяти.
Иногда вопрос заключается в том, что процесс автоочистки на столе занимает очень много времени (дней). Я хочу иметь возможность приблизительно сказать, сколько времени займет конкретная команда вакуума, чтобы иметь возможность решить, отменять ли ее или нет. Также, если бы был индикатор прогресса для вакуумных операций postgres, это было бы очень полезно.
Редактировать:
Я не ищу пуленепробиваемого решения. Достаточно приблизительного подсчета количества мертвых кортежей или необходимых байтов ввода / вывода, чтобы принять решение. Это действительно раздражает, когда ты не знаешь, когда VACUUM
закончишь.
Я видел, что pg_catalog.pg_stat_all_tables
есть столбец для количества мертвых кортежей. Таким образом, можно получить оценку, даже если это означает, что нужно идти к ANALYZE
столу раньше. С другой стороны, autovacuum_vacuum_threshold
и autovacuum_vacuum_scale_factor
одни только настройки доказывают, что сам Postgres знает кое-что о количестве изменений в таблицах и, вероятно, передает его в руки администратора баз данных.
Я не уверен, какой запрос выполнить, потому что когда я запускаю VACUUM VERBOSE
, я вижу, что обрабатываются не только таблицы, но и индексы по ним.