Размер базы данных Postgres намного больше, чем табличных пространств в файловой системе
У меня есть экземпляр Postgres 8.3 с табличными пространствами около 74G. Это отлично.
Но если я спрашиваю postgres, насколько велика моя база данных, я получаю (неожиданный) большой ответ: 595 ГБ.
Это кажется очень странным. Тесты дискового ввода-вывода в системе находятся в "нормальном" диапазоне, но запросы выполняются медленнее, чем раньше.
Это повреждение базы данных? Или есть способы "исправить" эту странность?
[Редактировать] Я проверяю размер табличного пространства по ОС:
/usr/local/pgsql/data/tblspaces/du -c -h
74G total
Все табличные пространства есть
Я проверяю размер базы данных следующим образом:
select pg_size_pretty(pg_database_size('database'))
[Edit2]
Я также проверил весь каталог /usr/local/pgsql/ dir. Это 76 г
И я запустил этот запрос:
select
tablename
, pg_relation_size(tablename)
, pg_size_pretty(pg_relation_size(tablename) ) as relsize
, pg_size_pretty(pg_total_relation_size(tablename) ) as disksize
, pg_total_relation_size(tablename)
from pg_tables where schemaname <> 'information_schema'
order by 2 desc
Который возвратил "нормальные" размеры отношений, ни один из которых не превысил размер диска.
4 ответа
Оказалось, проблема коррупции. Полное восстановление резервной копии решило проблему
Размер табличного пространства можно проверить с помощью:
SELECT pg_size_pretty(pg_tablespace_size('name of tablespace'));
Похоже, ваша база данных хранит не все свои объекты (таблицы, индексы и т. Д.) В определенном табличном пространстве, но также и другое (по умолчанию?) Табличное пространство. Проверьте pg_class и pg_tablespace, что-то вроде этого:
SELECT
*
FROM pg_class
JOIN pg_tablespace ON reltablespace = pg_tablespace.oid
WHERE
spcname <> 'name of tablespace';
Это звучит так странно! Как вы проверяли размер базы данных и размер табличного пространства? может быть ваша база данных находится в разных табличных пространствах.
- чтобы получить размер базы данных mydb=> выберите pg_size_pretty (pg_database_size ('mydb'));
pg_size_pretty
214 МБ (1 строка)
- чтобы показать все табличное пространство, связывающее вашу базу данных, и введите следующую команду \db
Вы недавно пылесосили БД? Это может иметь драматические последствия, особенно если на больших столах много оттока.
Кроме того, насколько велик результат pg_dump?