Уменьшить размер таинственного нагромождения основной/базовой базы

Уменьшить размер таинственного нагромождения основной/базовой базы

Использую PostgreSQL 9.3. У меня был долго выполняющийся запрос, обновляющий около 8 млн строк. Что-то явно пошло не так. Через 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

Поскольку мои реальные данные находятся в табличных пространствах, хранящихся в разных томах, я предполагаю, что это какие-то временные транзакционные данные, которые накопились.

В сети есть несколько сообщений о похожих проблемах, но канонического решения я не нашел. В общем, совет такой: "запустите VACUUM FULL", и иногда накопившийся хлам уходит. Это то, что я делаю сейчас, но это занимает время, и я боюсь, что могу заполнить оставшееся дисковое пространство (3 ГБ) и все рухнет.

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

решение1

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

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

SELECT oid, * FROM pg_database

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

Прямо сейчас я перемещаю базу данных в пользовательское табличное пространство, используя

ALTER DATABASE mydb SET TABLESPACE mytablespace;

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

Связанный контент