Размер базы данных Postgres намного больше, чем у табличных пространств в файловой системе - PullRequest
3 голосов
/ 14 сентября 2011

У меня есть экземпляр Postgres 8.3 с табличными пространствами на общую сумму около 74G. Это отлично.

Но если я спрашиваю postgres, насколько велика моя база данных, я получаю (неожиданный) большой ответ: 595 ГБ.

Это кажется очень странным. Тесты дискового ввода-вывода в системе находятся в «нормальном» диапазоне, но запросы выполняются медленнее, чем раньше.

Это повреждение базы данных? Или есть способы «исправить» эту странность?

[Изменить] Я проверяю размер табличного пространства с помощью os:

/usr/local/pgsql/data/tblspaces/du -c -h
74G total 

Есть все табличные пространства

Я проверяю размер базы данных следующим образом:

select pg_size_pretty(pg_database_size('database')) 

[Edit2]

Я также проверил весь каталог / usr / local / pgsql / dir. Это 76 G

И я запустил этот запрос:

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 ]

2 голосов
/ 17 января 2013

Оказалось, коррупционная проблема.Полное восстановление резервной копии решило проблему

1 голос
/ 14 сентября 2011

Размер табличного пространства можно проверить с помощью:

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';
0 голосов
/ 15 сентября 2011

Вы недавно пылесосили БД?Это может потенциально иметь драматический эффект, особенно если на больших столах много оттока.

Кроме того, насколько велик результат pg_dump?

0 голосов
/ 14 сентября 2011

Звучит так странно! Как вы проверяли размер базы данных и размер табличного пространства? может быть ваша база данных находится в разных табличных пространствах.

- чтобы получить размер базы данных mydb => select pg_size_pretty (pg_database_size ('mydb'));

pg_size_pretty

214 МБ (1 ряд)

- показать все табличное пространство подключите свою базу данных и введите следующее \ Дб

...