Thread: Finding out free space?

Finding out free space?

From
"Hans Guijt"
Date:
I need to provide an alarm function that will alert my customer when the
amount of free space in a database has reached some critical threshold. This
problem is not entirely trivial, since free space can be located both in the
file system and in the database itself.

I'm not looking for a particularly accurate function (and suspect that one
is probably not feasible anyway) - anything that comes to within a gigabyte
of the actual value is fine with me. Basically I need to figure out two
things:

1. Where does Postgres stores its datafiles? This will allow me to figure
out how much space is still available on the filing system.

2. How much space is unused within the data files themselves?

I'd appreciate a pointer on where I should look for this sort of
information.


Regards,

Hans Guijt



Re: Finding out free space?

From
"Andy Shellam (Mailing Lists)"
Date:
I'm not too sure where the default Postgres data directory is, but to
find out how much free space a database is using, you need to know it's
OID.  Run the query:

SELECT OID, Datname FROM pg_database;

to get a list of database names and their corresponding OIDs.  Then you
can do (standard Unix command)

du -sh $PGDIR/$OID

(where $PGDIR is the data directory root for PGSQL, and $OID is the oid
of the database).  eg. for database postgres on my system (note
/endeavour/dbstore is my PG data root):

[root@sydney /]# echo "SELECT OID, Datname FROM
pg_database;"|/usr/local/pgsql/bin/psql -d postgres -U postgresql

  oid  |   datname
-------+-------------
 10793 | postgres
........

[root@sydney /]# du -sh /endeavour/dbstore/base/10793
3.6M    /endeavour/dbstore/base/10793

To get the amount of freespace used in PGSQL as a whole, use "du -sh
$PGDIR" (replace $PGDIR with your PG data root.)

Hope this gets you started.  To find your cluster root, you could do a
"find / -name PG_VERSION", as these files will only be under your data
root - this highest-level one returned will be your data root.

Andy.

Hans Guijt wrote:
> I need to provide an alarm function that will alert my customer when
> the amount of free space in a database has reached some critical
> threshold. This problem is not entirely trivial, since free space can
> be located both in the file system and in the database itself.
>
> I'm not looking for a particularly accurate function (and suspect that
> one is probably not feasible anyway) - anything that comes to within a
> gigabyte of the actual value is fine with me. Basically I need to
> figure out two things:
>
> 1. Where does Postgres stores its datafiles? This will allow me to
> figure out how much space is still available on the filing system.
>
> 2. How much space is unused within the data files themselves?
>
> I'd appreciate a pointer on where I should look for this sort of
> information.
>
>
> Regards,
>
> Hans Guijt
>
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 4: Have you searched our list archives?
>
>               http://archives.postgresql.org
>
> !DSPAM:37,4559da5e40419901994390!
>
>


--
Andy Shellam
NetServe Support Team

the Mail Network
"an alternative in a standardised world"

p: +44 (0) 121 288 0832/0839
m: +44 (0) 7818 000834


Re: Finding out free space?

From
Robert Treat
Date:
If you're using a recent database (8.1+), you can get this same info by using
the various built in size functions
http://www.postgresql.org/docs/8.1/interactive/functions-admin.html#FUNCTIONS-ADMIN-DBSIZE

You can find out the base postgresql directory doing "show data_directory".

Getting the free space of your relations is a bit trickier, probably
pgstattuple in contrib is your best bet, though if you have your users
running autovacuum they shouldnt be carrying too much dead space.

HTH.

On Tuesday 14 November 2006 11:25, Andy Shellam (Mailing Lists) wrote:
> I'm not too sure where the default Postgres data directory is, but to
> find out how much free space a database is using, you need to know it's
> OID.  Run the query:
>
> SELECT OID, Datname FROM pg_database;
>
> to get a list of database names and their corresponding OIDs.  Then you
> can do (standard Unix command)
>
> du -sh $PGDIR/$OID
>
> (where $PGDIR is the data directory root for PGSQL, and $OID is the oid
> of the database).  eg. for database postgres on my system (note
> /endeavour/dbstore is my PG data root):
>
> [root@sydney /]# echo "SELECT OID, Datname FROM
> pg_database;"|/usr/local/pgsql/bin/psql -d postgres -U postgresql
>
>   oid  |   datname
> -------+-------------
>  10793 | postgres
> ........
>
> [root@sydney /]# du -sh /endeavour/dbstore/base/10793
> 3.6M    /endeavour/dbstore/base/10793
>
> To get the amount of freespace used in PGSQL as a whole, use "du -sh
> $PGDIR" (replace $PGDIR with your PG data root.)
>
> Hope this gets you started.  To find your cluster root, you could do a
> "find / -name PG_VERSION", as these files will only be under your data
> root - this highest-level one returned will be your data root.
>
> Andy.
>
> Hans Guijt wrote:
> > I need to provide an alarm function that will alert my customer when
> > the amount of free space in a database has reached some critical
> > threshold. This problem is not entirely trivial, since free space can
> > be located both in the file system and in the database itself.
> >
> > I'm not looking for a particularly accurate function (and suspect that
> > one is probably not feasible anyway) - anything that comes to within a
> > gigabyte of the actual value is fine with me. Basically I need to
> > figure out two things:
> >
> > 1. Where does Postgres stores its datafiles? This will allow me to
> > figure out how much space is still available on the filing system.
> >
> > 2. How much space is unused within the data files themselves?
> >
> > I'd appreciate a pointer on where I should look for this sort of
> > information.
> >
> >
> > Regards,
> >
> > Hans Guijt
> >
> >
> >
> > ---------------------------(end of broadcast)---------------------------
> > TIP 4: Have you searched our list archives?
> >
> >               http://archives.postgresql.org
> >
> > !DSPAM:37,4559da5e40419901994390!

--
Robert Treat
Build A Brighter LAMP :: Linux Apache {middleware} PostgreSQL