Стало недоступно подключение к базам, ошибка:
Aug 12 15:10:33 psql postgres[6391]: [2-2] HINT: To avoid a database shutdown, execute a full-database VACUUM in "data-01".
Aug 12 15:10:33 psql postgres[6391]: [3-1] WARNING: database "data-01" must be vacuumed within 10994425 transactions
Операция
/bin/postgres --single -D /home/postgres/data < /home/postgres/fix.sql (в fix.sql - VACUUM FULL)
ничего не дает, т.к. вылетает через 1-2 минуты. Запустил ее в цикле, поставил на ночь. После того как количество within 10994425 transactions дошло до нуля их опять стало столько же, сколько было и в начале вакума.
vacuumdb использовать не могу, т.к. при поднятом постгре, ругается:
database is not accepting commands to avoid wraparound data loss in database ""data-01"
Stop the postmaster and use a standalone backend to vacuum database ""data-01".
при не запущенном, логично говорит:
vacuumdb: could not connect to database postgres: could not connect to server: Нет такого файла или каталога
Is the server running locally and accepting
connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
Еще в логах фигурирует:
You may have already suffered transaction-wraparound data loss
Может ли кто помочь идеей?
Версия PostgreSQL какая?
Версия PostgreSQL какая?
8.3
8.3
Ууууу! Ну то-то я и смотрю.В
Ууууу! Ну то-то я и смотрю.
В 9-ке уже autovacuum работает, да и сам vacuum не блокирует БД и можно выполнять на ходу.
Тут уже предположения, но почему же в команде
/bin/postgres --single -D /home/postgres/data < /home/postgres/fix.sql (в fix.sql - VACUUM FULL)
у вас не указана БД для которой вы делаете? Да и формат команды VACUUM FULL несколько иной:
http://postgresql.ru.net/manual8.4/sql-vacuum.html
и заодно и про команду vacuumdb почитайте:
http://postgresql.ru.net/manual8.4/app-vacuumdb.html
Извините, когда копировал,
Извините, когда копировал, хотел изменить настоящие имя базы, затереть, затер, а вставить не вставил. Команда выглядела так:
/bin/postgres --single -D /home/postgres/data data-01 < /home/postgres/fix.sql (в fix.sql - VACUUM FULL)
Чем же отличается формат?
VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] [ table ]
у меня же:
VACUUM FULL
Ну как бы рациональней делать
Ну как бы рациональней делать всё таки VACUUM на таблицу, где он нужен, а не на всю БД.
А что после выполнения VACUUM FULL вам postgresql говорит? Может какие предупреждения есть или ошибки? И ещё, есть подозрения, что у вас куча открытых соединений, которые не записывают транзакции - может такое быть? Вы ничего не крутили в конфиге на предмет включения синхронных/асинхронных транзакций? Проверьте на всякий случай по конфигу и мануалу, что у вас включены СИНХРОННЫЕ транзакции, а также что на клиентах включе autocommit (разумеется если только клиент не требует обратного).
После того как количество
После того как количество within 10994425 transactions дошло до нуля их опять стало столько же, сколько было и в начале вакума.
Да, в кофиге ничего не трогал
Так я и не понял - что вам
Так я и не понял - что вам говорит PostgreSQL после исполнения VACUUM FULL?
Ещё можете попробовать слить базу в дамп, залить дамп обратно и посмотреть что будет. (Лучше в другую БД, чтобы не покоцать существующую, если по каким-либо причинам дамп не зальётся)
В логах постгре написано: Aug
В логах постгре написано:
Aug 12 15:10:33 psql postgres[6391]: [2-2] HINT: To avoid a database shutdown, execute a full-database VACUUM in "data-01".
Aug 12 15:10:33 psql postgres[6391]: [3-1] WARNING: database "data-01" must be vacuumed within 10994425 transactions
что до, что и после вакума, только псле вакума вместо 1 000 000 транзацций стало уже больше 10 000 000
Дамп не могу сделать, т.к. выдается ошибка типа: сначала сделайте вакум
> В логах постгре
> В логах постгре написано:
Спасибо, я прочитал это ещё в 1-м сообщении.
Что выдаёт после набора команды VACUUM FULL уже 3-й раз спрашиваю!
Обновитесь до последней версии вашей ветки 8.3.x, если ещё не обновились и это в принципе возможно - может именно эта проблема уже решена.
> Дамп не могу сделать, т.к. выдается ошибка типа: сначала сделайте вакум
Значит нужно выбрать время, закрыть все клиентские соединения и обслужить БД.
1. После VACUUM FULL выдается
1. После VACUUM FULL выдается сообщение вида:
Aug 12 15:10:33 psql postgres[6391]: [2-2] HINT: To avoid a database shutdown, execute a full-database VACUUM in "data-01".
Aug 12 15:10:33 psql postgres[6391]: [3-1] WARNING: database "data-01" must be vacuumed within 10994425 transactions
оно выдается как после команды, так и в лог пишется.
2.Все клиентские соединения закрыты, но еще раз говорю при поднятом postgresql и желание зайти в psql или воспользоваться vacuumdb выдается ошибка вида:
database is not accepting commands to avoid wraparound data loss in database ""data-01"
Stop the postmaster and use a standalone backend to vacuum database ""data-01".
Кроме обновления есть еще мысли?
> Stop the postmaster and use
> Stop the postmaster and use a standalone backend to vacuum database ""data-01".
Ну так делали?
Делал
Делал, какое время на экран выводится
Aug 12 15:10:33 psql postgres[6391]: [2-2] HINT: To avoid a database shutdown, execute a full-database VACUUM in "data-01".
Aug 12 15:10:33 psql postgres[6391]: [3-1] WARNING: database "data-01" must be vacuumed within 10994425 transactions
Aug 12 15:10:33 psql postgres[6391]: [2-2] HINT: To avoid a database shutdown, execute a full-database VACUUM in "data-01".
Aug 12 15:10:33 psql postgres[6391]: [3-1] WARNING: database "data-01" must be vacuumed within 10994424 transactions
Потом останавливается и все.
Останавливается - это
Останавливается - это подвисает? Если да, то в это время есть ли какая-либо системная активность (жрёт ли postgres процессор, работают ли жёсткие диски)? Если да, то можно попробовать подождать полчасика-час. Если нет, то у меня идеи кончились, видимо вам нужно уже обращаться к разработчикам, за штатное обслуживание системы ваш случай явно выходит.
Останавливается это значит
Останавливается это значит вернул управление командной строке psql
Но в итоге получается, что
Но в итоге получается, что команда VACUUM FULL ничего не сделала?
Значит один леший к разработчикам.