общий размер базы данных postgresql не соответствует сумме размеров отдельных таблиц - PullRequest
9 голосов
/ 23 февраля 2011

Моя база данных postgres (версия 8.2.3) показывает размер 24 ГБ.

Чтобы получить эту цифру, я выполняю этот запрос:

SELECT
  oid, datname, pg_database_size(datname) as actualsize, 
  pg_size_pretty(pg_database_size(datname)) as size 
FROM pg_database 
ORDER BY datname  

Однако размеры отдельных таблиц в одной и той же базе данных не добавляются в 24 ГБ при выполнении этого запроса:

SELECT 
  schemaname, tablename, pg_size_pretty(size) AS size_pretty, 
  pg_size_pretty(total_size) AS total_size_pretty 
FROM
  (SELECT *, pg_relation_size(schemaname||'.'||tablename) AS size, 
   pg_total_relation_size(schemaname||'.'||tablename) AS total_size 
   FROM pg_tables where schemaname = 'public') AS TABLES 
ORDER BY total_size DESC;

Я суммировал размер отдельных таблиц с красивыми размерами и total_size, но значение не совпадает:

Я получаю красивый размер 3,5 ГБ

Я получаю total_size_pretty 5,2 ГБ.

Где я могу узнать, для чего используется оставшаяся часть общего пространства?

Ответы [ 2 ]

8 голосов
/ 24 февраля 2011

Обычно я использую следующие два запроса, чтобы получить размер объектов базы данных. Надеюсь, это поможет.

SELECT pg_size_pretty(sum(pg_relation_size(pg_class.oid))::bigint), nspname,
CASE pg_class.relkind WHEN 'r' THEN 'table' WHEN 'i' THEN 'index' WHEN 'S' THEN 'sequence' WHEN 'v' THEN 'view' WHEN 't' THEN 'toast' ELSE pg_class.relkind::text END
FROM pg_class
LEFT OUTER JOIN pg_namespace ON (pg_namespace.oid = pg_class.relnamespace)
GROUP BY pg_class.relkind, nspname
ORDER BY sum(pg_relation_size(pg_class.oid)) DESC;

-

SELECT pg_size_pretty(pg_relation_size(pg_class.oid)), pg_class.relname, pg_namespace.nspname,
CASE pg_class.relkind WHEN 'r' THEN 'table' WHEN 'i' THEN 'index' WHEN 'S' THEN 'sequence' WHEN 'v' THEN 'view' WHEN 't' THEN 'TOAST' ELSE pg_class.relkind::text END
FROM pg_class 
LEFT OUTER JOIN pg_namespace ON (pg_namespace.oid = pg_class.relnamespace)
ORDER BY pg_relation_size(pg_class.oid) DESC;
1 голос
/ 23 февраля 2011

А каков общий размер всех индексов и крупных объектов?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...