Я работаю над системой разработки и восстановил базу данных, скажем «foo», которую я использую для целей разработки. Пока я работаю, я только что запустил DROP DATABASE foo. Однако я быстро понял, что съел все пространство на моем диске. Дерьмо.
Освобождает ли VACUUM FULL из другой логической базы данных пространство из базы данных, которую я ранее отбросил (foo)? Я попробовал это из другой логической базы данных, и освободилось свободное место, но я не думаю, что этого было достаточно, чтобы учесть все вызовы CREATE DATABASE / DROP DATABASE, которые я сделал. Возможно, это просто логическая база данных, из которой я работал.
Должен быть способ вернуть это пространство без выполнения инициализации всей базы данных?
РЕДАКТИРОВАТЬ
Поэтому я повторно инициализировал базу данных из резервной копии, примерно выполнив следующие действия . После восстановления я восстановил тонну места на диске! Пока это работает, но любая помощь в том, как очистить удаленную базу данных, все равно будет полезна.
РЕДАКТИРОВАТЬ 2
Поэтому мне удалось собрать больше информации об этой проблеме ... Вот что я привел в качестве примера:
Initial partition size:
Size Used Avail Use% Mounted on
25G 8.1G 16G 35% /apps1
After creating my new database and populating it:
25G 18G 6.4G 73% /apps1
After Dropping the database using "DROP database mydb" from a separate logical DB:
25G 13G 11G 56% /apps1
Поэтому мне кажется, что новая БД заняла ~ 9,6 ГБ на диске. Однако, после его сброса, освободившееся дисковое пространство только выросло на ~ 4.6G. Итак, примерно 5 ГБ свободного места заставляет меня задуматься о том, что происходит !?
И этот цикл продолжается, когда я воссоздаю, заполняю и снова опускаюсь.
Кто-нибудь имеет какие-либо идеи, что остается после того, как команда "DROP DATABASE" выдается?
источник
Ответы:
Попробуйте
sudo lsof| grep deleted
и проверьте, появляется ли какой-либо процесс PostgreSQL. Эта команда ищет файлы, которые были удалены, но ее файловые дескрипторы все еще открыты любым процессом. Еще один побочный эффект заключается в том, чтоdf -h
иdu -sh /
отличается. Это потому, чтоdu
смотрит на файловую систему и суммирует размер всех файлов, иdf
смотрит на физическое устройство.У меня только что была проблема с базой данных, которая не освобождала место после a,
DROP table
и это было причиной.Единственное решение, которое я знаю, это перезапустить базу данных. Может быть, вы можете попытаться отправить перезагрузку (SIGHUP).
источник
lsof | grep deleted
Наконечник был хороший; добавьте, что вам нужно только определить, какие сеансы postgresql все еще активны, и уничтожить их, чтобы освободить файлы. В моем случае из 500+ активных соединений, почти всех в IDLE или COMMIT, было убито одно, найденное сSELECT * FROM pg_stat_activity
помощью ANALYZE и застрявшее в нем, чтобы освободить удаленные файлы. ! 00 ГБ освобождено.Насколько я понимаю, когда вы удаляете базу данных, ее и ее файлов больше нет.
Если вы не используете табличные пространства, то каждая база данных должна иметь свои данные в своем собственном подкаталоге в каталоге $ PGDATA / base. Используя один из моих серверов для примера (как пользователь postgres):
Теперь, если мы создадим новую базу данных, в каталоге $ PGDATA / base должен быть еще один подкаталог:
Именно это мы и видим ($ PGDATA / base / 83637 является подкаталогом для новой базы данных).
Удаление этой базы данных также должно удалить файлы данных:
Именно этого мы и ожидали - каталог $ PGDATA / base / 83637 пропал, не должно быть ничего для вакуумирования.
Вы уверены, что больше нет места на диске? Одна из ваших других баз данных? лог-файлы?
То, что вы могли бы попробовать, это:
делать различные вещи из базы данных, создавать, удалять и т. д., а затем:
чтобы получить представление о том, куда идет дисковое пространство.
источник
ls
» в каталоге $ PGDATA как до, так и после добавления / удаления базы данных, поскольку это должно указывать, какие другие каталоги растут как на дрожжах.