Назад | Перейти на главную страницу

postgres вакуум

Хорошо, ребята, я переехал в новую компанию и вижу, что у них здесь одна база данных PostgreSQL для запуска OpenNMS.

Я человек MySQL, совсем не знаком с PostgreSQL, но я по крайней мере научился запускать psql и postgres -D попасть в однопользовательский режим.

Как бы то ни было, OpenNMS разбился. Я вошел и отследил это до PostgreSQL, выдав эту ошибку:

WARNING:  database "template1" must be vacuumed within 965550 transactions
HINT:  To avoid a database shutdown, execute a full-database VACUUM in "template1".

На самом деле он начинался с 1 миллиона, а я опустился до 965500, как видите. Я дошел до этого момента, войдя в систему для одного пользователя (postgres -D) и работает Vacuum full. Теперь я ожидал, что это очистит его, но в результате получилось ровно 55 строк:

WARNING:  database "template1" must be vacuumed within 938861 transactions
HINT:  To avid a database shutdown, execute a full-database VACUUM in "template1".
WARNING:  database "template1" must be vacuumed within 938860 transactions
HINT:  To avoid a database shutdown, execute a full-database VACUUM in "template1".
WARNING:  database "template1" must be vacuumed within 938861 transactions
HINT:  To avoid a database shutdown, execute a full-database VACUUM in "template1".
WARNING:  database "template1" must be vacuumed within 938860 transactions
HINT:  To avoid a database shutdown, execute a full-database VACUUM in "template1".

Итак, у меня есть вопрос: нужно ли мне просто продолжать работать, пока я не достигну 0, или я делаю это неправильно?

Я сталкивался с этой проблемой раньше. Ниже приведены мои заметки о том, как я это исправил.

Вам нужно решить проблему, запустив вакуум, на что удобно намекает ошибка. Для этого сначала выключите postgres. sudo /sbin/service postgresql stop

Теперь вам нужно просмотреть каждую базу данных и выполнить вакцинацию с помощью автономной серверной части. От имени пользователя postgres Выполните: postgres -D /opt/pgsql/data/ postgres

Где / opt / pgsql / data - это путь к каталогу данных postgres, а postgres - это имя базы данных, которую вы хотите исправить.

Вы получите сообщение вроде:

Автономный сервер PostgreSQL 8.1.18

бэкэнд>

Просто введите VACUUM в подсказке backend>.

Теперь вы, скорее всего, получите что-то вроде ПРЕДУПРЕЖДЕНИЕ: база данных «template1» должна быть очищена в течение 999407 транзакций. СОВЕТ: Чтобы избежать завершения работы базы данных, выполните полную VACUUM базы данных в «template1».

Просто продолжайте повторять шаги, каждый раз меняя DBNAME, пока вы не перестанете получать предупреждения. Когда это произойдет, вы можете перезапустить postgres, и все снова будет в порядке.

Изменить: я также должен упомянуть, что после того, как мы сделали этот процесс несколько раз; мы решили реализовать процесс автовакуумирования: http://www.postgresql.org/docs/8.1/static/main maintenance.html#AUTOVACUUM