Уменьшите размер основного/основного таинственного наращивания

Использование PostgreSQL 9.3. У меня было продолжительное обновление запроса вокруг 8M строки. Что-то, очевидно, пошло не так, как надо. 2 дня спустя я получил предупреждение недостаточного пространства на диске. Я остановил запрос, и это - то, что я видел.

root@server:/var/lib/postgresql/9.3/main# du -BM * | sort -n
1M  global
1M  pg_notify
1M  pg_serial
1M  pg_snapshots
1M  pg_stat
1M  pg_stat_tmp
1M  pg_tblspc
1M  pg_twophase
1M  PG_VERSION
1M  pg_xlog/archive_status
1M  mydb.opts
1M  mydb.pid
3M  pg_subtrans
7M  base/1
7M  base/12030
7M  base/12035
11M base/22029472
21M pg_clog
72M pg_multixact/offsets
315M    pg_log
444M    pg_multixact/members
516M    pg_multixact
625M    pg_xlog
3493M   base/pgsql_tmp
61851M  base/22053373
65372M  base

Отметьте это: 61851M base/22053373

Так как мои фактические данные находятся в табличных областях, сохраненных в различных объемах, я предполагаю, что это - некоторый временный материал транзакции, который накопился.

Существуют некоторые сообщения онлайн о подобных проблемах, но никакое каноническое решение, которое я нашел. В целом совет является "выполненным ВАКУУМОМ, ПОЛНЫМ", и иногда накопленный хлам уходит. Это - то, что я делаю теперь, но это занимает время, и я боюсь, что мог бы заполнить остающееся дисковое пространство (3 ГБ) и принести всему обрушиться.

У кого-либо был опыт с этим? Что хранится здесь? Существует ли безопасный способ быстро освободить это пространство? Или, по крайней мере, переместите его в другое место (у меня есть много пространства на моих дисках табличной области).

3
задан 3 March 2015 в 12:38
1 ответ

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

Для тех, кто столкнулся с подобными проблемами, вот несколько вещей, которые я узнал во время исследования. base / 22053373 в моем случае является идентификатором базы данных. Вы можете увидеть, какая это база данных, вот так:

SELECT oid, * FROM pg_database

Каждый файл внутри имеет имя oid типа pg (таблица или иначе). Самые большие файлы, вероятно, взяты из ваших самых больших таблиц. Подключитесь к базе данных и выберите из коллекции pg_class , чтобы узнать, какая.

Прямо сейчас я перемещаю db в настраиваемое табличное пространство с помощью

ALTER DATABASE mydb SET TABLESPACE mytablespace;

Я почти уверен, что это решит мою проблему.

1158475]

3
ответ дан 3 December 2019 в 06:32

Теги

Похожие вопросы