Re: What's eating my space ?

From: "Albe Laurenz" <laurenz(dot)albe(at)wien(dot)gv(dot)at>
To: "Eric McKeeth *EXTERN*" <eldin00(at)gmail(dot)com>, "Andreas Kretschmer" <akretschmer(at)spamfence(dot)net>
Cc: <pgsql-general(at)postgresql(dot)org>
Subject: Re: What's eating my space ?
Date: 2011-05-20 08:19:04
Message-ID: D960CB61B694CF459DCFB4B0128514C20670D03F@exadv11.host.magwien.gv.at
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Eric McKeeth wrote:
>>> I wander what is taking up my space on disk ...
>>>
>>> btv=# SELECT pg_size_pretty(pg_database_size('btv_good'));
>>> pg_size_pretty
>>> ----------------
>>> 10 GB
>>> (1 row)

[SELECT total size of all non-system tables]

>>> The sum of biggest tables is not even close to the total db size .
>>> Some index going wild ?
>>
>> Your sum doesn't contains indexes and toast-tables.
>>
> Since he used pg_total_relation_size(), according to the manual
>
(http://www.postgresql.org/docs/current/interactive/functions-admin.html
) indexes and toast should be
> included in the numbers reported for the tables. Unfortunately, I
don't have any insight as to why
> pg_database_size() is returning a number roughly 5x larger than the
sum of pg_total_relation_size()
> here.

Maybe it's the system tables.

Try running the following query:

SELECT SUM(pg_total_relation_size(C.oid)) AS "total_size",
(N.nspname IN ('pg_catalog', 'information_schema')) AS
"system_object"
FROM pg_class C
JOIN pg_namespace N ON (N.oid = C.relnamespace)
LEFT OUTER JOIN pg_tablespace T ON (C.reltablespace = T.oid)
WHERE C.relkind <> 'i'
AND nspname !~ '^pg_toast'
AND COALESCE(T.spcname, 'default') != 'pg_global'
GROUP BY nspname IN ('pg_catalog', 'information_schema');

which will give you a sum of the sizes of all tables and their
appendixes,
grouped by system and non-system tables. I exclude global tables.

On my 8.4 test database I get:

total_size | system_object
------------+---------------
376832 | f
5505024 | t
(2 rows)

For
SELECT pg_database_size(current_database())
I get:

pg_database_size
------------------
5972260
(1 row)

which comes pretty close.

Yours,
Laurenz Albe

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Albe Laurenz 2011-05-20 08:25:55 Re: Password issue
Previous Message Craig Ringer 2011-05-20 08:01:59 Re: Memcached for Database server