2011-02-23 2 views
6

내 postgres 데이터베이스 (버전 8.2.3)의 크기가 24GB입니다.postgresql 총 데이터베이스 크기가 개별 테이블 크기의 합계와 일치하지 않습니다

내가이 쿼리 실행이 그림을 얻으려면 :

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; 

:이 쿼리를 실행할 때

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 GB의 추가되지 않습니다 꽤 많은 크기와 total_size로 개별 테이블 크기를 합산했지만 값이 일치하지 않습니다.

3.5 크기의 예쁜 크기가 나옵니다

total_size_pretty가 5.2 GB입니다.

나머지 공간의 나머지 부분은 어디에서 확인할 수 있습니까?

답변

1

그리고 모든 인덱스와 대형 개체의 총 크기는 얼마입니까?

7

일반적으로 다음 두 가지 쿼리를 사용하여 데이터베이스 개체의 크기를 가져옵니다. 희망이 도움이됩니다.

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

아주 좋은 질의, 고마워요. (발견 된 10GB의 색인 ...) –

관련 문제