2002-06-13 07:15:22 +02:00
|
|
|
<!--
|
2002-10-17 00:06:33 +02:00
|
|
|
$Header: /cvsroot/pgsql/doc/src/sgml/diskusage.sgml,v 1.6 2002/10/16 22:06:33 petere Exp $
|
2002-06-13 07:15:22 +02:00
|
|
|
-->
|
|
|
|
|
|
|
|
<chapter id="diskusage">
|
|
|
|
<title>Monitoring Disk Usage</title>
|
|
|
|
|
2002-10-17 00:06:33 +02:00
|
|
|
<para>
|
|
|
|
This chapter discusses how to monitor the disk usage of a PostgreSQL
|
|
|
|
database system. In the current release, the database administrator
|
|
|
|
does not have much control over the on-disk storage layout, so this
|
|
|
|
chapter is mostly informative and can give you some ideas how to
|
|
|
|
manage the disk usage with operating system tools.
|
|
|
|
</para>
|
|
|
|
|
2002-06-13 07:15:22 +02:00
|
|
|
<sect1 id="disk-usage">
|
2002-10-17 00:06:33 +02:00
|
|
|
<title>Determining Disk Usage</Title>
|
2002-06-13 07:15:22 +02:00
|
|
|
|
|
|
|
<indexterm zone="disk-usage">
|
|
|
|
<primary>disk usage</primary>
|
|
|
|
</indexterm>
|
|
|
|
|
|
|
|
<para>
|
|
|
|
Each table has a primary heap disk file where most of the data is
|
|
|
|
stored. To store long column values, there is also a
|
|
|
|
<acronym>TOAST</> file associated with the table, named based on the
|
2002-09-21 20:32:54 +02:00
|
|
|
table's OID (actually <literal>pg_class.relfilenode</>), and an index on the
|
2002-06-13 07:15:22 +02:00
|
|
|
<acronym>TOAST</> table. There also may be indexes associated with
|
|
|
|
the base table.
|
|
|
|
</para>
|
|
|
|
|
|
|
|
<para>
|
2002-06-21 21:06:44 +02:00
|
|
|
You can monitor disk space from three places: from
|
|
|
|
<application>psql</> using <command>VACUUM</> information, from
|
|
|
|
<application>psql</> using <application>contrib/dbsize</>, and from
|
|
|
|
the command line using <application>contrib/oid2name</>. Using
|
|
|
|
<application>psql</> on a recently vacuumed (or analyzed) database,
|
|
|
|
you can issue queries to see the disk usage of any table:
|
2002-06-13 07:15:22 +02:00
|
|
|
<programlisting>
|
|
|
|
play=# SELECT relfilenode, relpages
|
|
|
|
play-# FROM pg_class
|
|
|
|
play-# WHERE relname = 'customer';
|
|
|
|
relfilenode | relpages
|
|
|
|
-------------+----------
|
|
|
|
16806 | 60
|
|
|
|
(1 row)
|
|
|
|
</programlisting>
|
|
|
|
</para>
|
|
|
|
|
|
|
|
<para>
|
2002-06-21 21:06:44 +02:00
|
|
|
Each page is typically 8 kilobytes. (Remember, <literal>relpages</>
|
|
|
|
is only updated by <command>VACUUM</> and <command>ANALYZE</>.) To
|
|
|
|
show the space used by <acronym>TOAST</> tables, use a query based on
|
|
|
|
the heap relfilenode shown above:
|
2002-06-13 07:15:22 +02:00
|
|
|
<programlisting>
|
|
|
|
play=# SELECT relname, relpages
|
|
|
|
play-# FROM pg_class
|
2002-07-05 02:14:16 +02:00
|
|
|
play-# WHERE relname = 'pg_toast_16806' OR
|
2002-06-13 07:15:22 +02:00
|
|
|
play-# relname = 'pg_toast_16806_index'
|
|
|
|
play-# ORDER BY relname;
|
|
|
|
relname | relpages
|
|
|
|
----------------------+----------
|
|
|
|
pg_toast_16806 | 0
|
|
|
|
pg_toast_16806_index | 1
|
|
|
|
</programlisting>
|
|
|
|
</para>
|
|
|
|
|
|
|
|
<para>
|
|
|
|
You can easily display index usage too:
|
|
|
|
<programlisting>
|
|
|
|
play=# SELECT c2.relname, c2.relpages
|
|
|
|
play-# FROM pg_class c, pg_class c2, pg_index i
|
|
|
|
play-# WHERE c.relname = 'customer' AND
|
|
|
|
play-# c.oid = i.indrelid AND
|
|
|
|
play-# c2.oid = i.indexrelid
|
|
|
|
play-# ORDER BY c2.relname;
|
|
|
|
relname | relpages
|
|
|
|
----------------------+----------
|
|
|
|
customer_id_indexdex | 26
|
|
|
|
</programlisting>
|
|
|
|
</para>
|
|
|
|
|
|
|
|
<para>
|
|
|
|
It is easy to find your largest files using <application>psql</>:
|
|
|
|
<programlisting>
|
|
|
|
play=# SELECT relname, relpages
|
|
|
|
play-# FROM pg_class
|
|
|
|
play-# ORDER BY relpages DESC;
|
|
|
|
relname | relpages
|
|
|
|
----------------------+----------
|
|
|
|
bigtable | 3290
|
|
|
|
customer | 3144
|
|
|
|
</programlisting>
|
|
|
|
</para>
|
|
|
|
|
2002-06-21 21:17:40 +02:00
|
|
|
<para>
|
|
|
|
<application>dbsize</> loads functions into your database that allow
|
|
|
|
you to find the size of a table or database from inside
|
|
|
|
<application>psql</> without the need for <command>VACUUM/ANALYZE.</>
|
|
|
|
</para>
|
2002-06-13 07:15:22 +02:00
|
|
|
<para>
|
|
|
|
You can also use <application>oid2name</> to show disk usage. See
|
|
|
|
<filename>README.oid2name</> for examples. It includes a script
|
|
|
|
shows disk usage for each database.
|
|
|
|
</para>
|
|
|
|
</sect1>
|
2002-10-17 00:06:33 +02:00
|
|
|
|
|
|
|
<sect1 id="disk-full">
|
|
|
|
<title>Disk Full Failure</title>
|
|
|
|
|
|
|
|
<para>
|
|
|
|
The most important disk monitoring task of a database administrator
|
|
|
|
is to make sure the disk doesn't grow full. A filled data disk may
|
|
|
|
result in subsequent corruption of database indexes, but not of the
|
|
|
|
fundamental data tables. If the WAL files are on the same disk (as
|
|
|
|
is the case for a default configuration) then a filled disk during
|
|
|
|
database initialization may result in corrupted or incomplete WAL
|
|
|
|
files. This failure condition is detected and the database server
|
|
|
|
will refuse to start up.
|
|
|
|
</para>
|
|
|
|
|
|
|
|
<para>
|
|
|
|
If you cannot free up additional space on the disk by deleting
|
|
|
|
other things you can move some of the database files to other file
|
|
|
|
systems and create a symlink from the original location. But
|
|
|
|
note that <application>pg_dump</> cannot save the location layout
|
|
|
|
information of such a setup; a restore would put everything back in
|
|
|
|
one place. To avoid running out of disk space, you can place the
|
|
|
|
WAL files or individual databases in other locations while creating
|
|
|
|
them. See the <application>initdb</> documentation and <xref
|
|
|
|
linkend="manage-ag-alternate-locs"> for more information.
|
|
|
|
</para>
|
|
|
|
|
|
|
|
<tip>
|
|
|
|
<para>
|
|
|
|
Some file systems perform badly when they are almost full, so do
|
|
|
|
not wait until the disk is full to take action.
|
|
|
|
</para>
|
|
|
|
</tip>
|
|
|
|
</sect1>
|
2002-06-13 07:15:22 +02:00
|
|
|
</chapter>
|
|
|
|
|
|
|
|
<!-- Keep this comment at the end of the file
|
|
|
|
Local variables:
|
|
|
|
mode:sgml
|
|
|
|
sgml-omittag:nil
|
|
|
|
sgml-shorttag:t
|
|
|
|
sgml-minimize-attributes:nil
|
|
|
|
sgml-always-quote-attributes:t
|
|
|
|
sgml-indent-step:1
|
|
|
|
sgml-indent-data:t
|
|
|
|
sgml-parent-document:nil
|
|
|
|
sgml-default-dtd-file:"./reference.ced"
|
|
|
|
sgml-exposed-tags:nil
|
|
|
|
sgml-local-catalogs:("/usr/lib/sgml/catalog")
|
|
|
|
sgml-local-ecat-files:nil
|
|
|
|
End:
|
|
|
|
-->
|