2009-09-04 2 views
0

У меня есть «маленькая» проблема. Неделю назад моя база данных достигла полной емкости диска. Я удалил много строк в разных таблицах, пытаясь освободить место на диске. После того, как я попытался запустить полный вакуум, который не был завершен.PostgreSQL файлы вакуумных temp?

Что я хочу знать. Когда я остановил вакуум от полного усложнения, он оставляет любые временные файлы на диске, которые я должен удалить вручную? У меня теперь есть база данных, обладающая 100% -ной дисковой емкостью, без необходимости сказать, что это большая проблема.

Какие-либо советы по освобождению дискового пространства?

Я запускаю SUSE с базой данных postgres 8.1.4.

ответ

4

в первую очередь:

Upgrade

Даже если вы не можете до 8,2, 8,3 или 8,4 - по крайней мере перейти на новейший 8,1 (который 8.1.17 в данный момент, но будет 8.1 .18 через 1-2 дня).

Во-вторых: диагностируйте, в чем проблема.

Используйте инструмент du, чтобы определить, где именно находится место. Какой каталог занимает слишком много места?

Заполните с df то, что является общим используемым пространством, а затем проверьте, насколько это каталог PostgreSQL.

Лучший вариант заключается в следующем:

cd YOUR_PGDATA_DIR 
du -sk * 
cd base 
du -sk * 
cd LARGEST DIR FROM PREVIOUS COMMAND 
du -sk * | sort -nr | head 

Теперь, когда вы знаете, какой каталог в PGDATA использует место, вы можете сделать что-то об этом.

если это журналы или pg_temp - перезапустить pg или удалить журналы (pg_clog и pg_xlog не являются логами в общем значении слова, никогда ничего не удаляйте!).

Если это то, что в вашем базовом каталоге, а затем:

числовые каталоги в базовом каталоге относятся к базам данных. Вы можете проверить это с:

select oid, datname from pg_database; 

Когда вы знаете, базу данных, которая использует большую часть пространства, подключиться к нему, и проверить, какие файлы используют большую часть пространства.

имена файлов будут численными с дополнительным «.digits» суффикс - это суффикс (на данный момент) не имеет значения, и вы можете проверить, что именно представляет собой файл с помощью следующей команды:

select relname from pg_class where relfilenode = <NUMBER_FROM_FILE_NAME>; 

После того, как вы знаете, какие таблицы/indexs используют большую часть пространства - вы можете VACUUM FULL, или (намного лучше) выдать команду CLUSTER на них.

+0

Спасибо за ответ! Моя проблема в том, что диск на 100% заполнен. Вакуум и кластер нуждаются в свободном диске для запуска. Можно ли полностью удалить данные из БД без запуска вакуума/кластера? – jorgen

+0

Найдите стол, в который вы можете пожертвовать, и ПРОВЕРЬТЕ его. Это немедленно освободит место. – 2009-09-04 13:16:32

+0

Благодарим за оказанную помощь! – jorgen

1

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

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

Смежные вопросы