On 2012-Jan-21, at 6:39 PM, Scott Marlowe wrote:

> On Sat, Jan 21, 2012 at 1:37 AM, Dan Charrois <dan...@syz.com> wrote:
>> Hi everyone.  I'm currently in the situation of administering a rather large 
>> PostgreSQL database which for some reason seems to be even much larger than 
>> it should be.
>> 
>> I'm currently running version 8.4.5 - not the latest and greatest, I know - 
>> but this is a live database that would problematic to take down to upgrade 
>> unless all else fails - especially considering its size if it does need to 
>> be rebuilt somehow.
>> 
>> Anyway, I'm no stranger to SQL, but new to PostgreSQL - all my SQL 
>> administration in the past has been with MySQL.  So I'm somewhat bumbling my 
>> way through administrative commands trying to solve this - please bear with 
>> me.
>> 
>> The size of the tables reported by \dt+ add up to around 120 GB.  The size 
>> of the indexes reported with \di+ adds up to around 15 GB.  This is pretty 
>> consistent with what I would expect the data to require.
>> 
>> The problem is, the disk usage of the pgsql directory where the data is kept 
>> (as reported by 'du') comes to 647 GB - significantly more than it should.  
>> select pg_database_size('mydatabase') confirms this, returning 690830939920.
>> 
>> Vacuuming the tables (full and otherwise) hasn't helped, but then 
>> considering how the database is used, I didn't really expect it to.  It's 
>> strictly a read-only database, with the exception of once a month when it is 
>> refreshed by loading new data into newly created tables, and once that is 
>> done, vacuum analyzing the new tables, dropping the old tables, then 
>> renaming the new ones to have the name of the old ones.  Vacuums never claim 
>> to recover any space, and the disk usage stays the same.
>> 
>> So how do I find out what's eating up all this extra space?
> 
> Real quick, if you run pg_database_size(name) for each db, including
> template1 and postgres, what do you get back?


Thanks for your reply, Scott.

My database: 697490323216
postgres: 5537796
template0: 5537796
template1: 5537796

pg_database_size(mydatabase) did return a value consistent with disk usage.  
But that value didn't jive with what I expected from summing up the sizes I got 
from \dt+

It looks like a large TOAST table, not reported by \dt+ was the biggest 
culprit, but I thought it was orphaned.  Due to some help by Adrian Klaver, it 
looks like I was mistaken - it was in fact used by one of my tables.  So it 
looks like there wasn't really a problem at all - other than my data still 
taking up a lot more physical storage than I thought it did. I don't think 
there's much I can do about it, but that's much better than assuming it was 
related to a problem that needed fixing.

Thanks again!

Dan
--
Syzygy Research & Technology
Box 83, Legal, AB  T0G 1L0 Canada
Phone: 780-961-2213


-- 
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general

Reply via email to