From 5612949ff8296768ed8d03cc88024950864475b4 Mon Sep 17 00:00:00 2001 From: Bruce Momjian <bruce@momjian.us> Date: Thu, 13 Jun 2002 04:36:50 +0000 Subject: [PATCH] Add section on showing disk usage. --- doc/src/sgml/maintenance.sgml | 88 ++++++++++++++++++++++++++++++++++- 1 file changed, 87 insertions(+), 1 deletion(-) diff --git a/doc/src/sgml/maintenance.sgml b/doc/src/sgml/maintenance.sgml index 49e41b1433a..1d7033c12a6 100644 --- a/doc/src/sgml/maintenance.sgml +++ b/doc/src/sgml/maintenance.sgml @@ -1,5 +1,5 @@ <!-- -$Header: /cvsroot/pgsql/doc/src/sgml/maintenance.sgml,v 1.12 2002/03/06 06:44:31 momjian Exp $ +$Header: /cvsroot/pgsql/doc/src/sgml/maintenance.sgml,v 1.13 2002/06/13 04:36:50 momjian Exp $ --> <chapter id="maintenance"> @@ -366,6 +366,92 @@ VACUUM </sect2> </sect1> + <sect1 id="diskspace-maintenance"> + <title>Disk Space Maintenance</title> + + <indexterm zone="diskspace-maintenance"> + <primary>disk space</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 + table's oid (actually pg_class.relfilenode), and an index on the + <acronym>TOAST</> table. There also may be indexes associated with + the base table. + </para> + + <para> + You can monitor disk space from two places; from inside + <application>psql</> and from the command line using + <application>contrib/oid2name</>. Using <application>psql</> you can + issue queries to see the disk usage for any table: +<programlisting> +play=# SELECT relfilenode, relpages +play-# FROM pg_class +play-# WHERE relname = 'customer'; + relfilenode | relpages +-------------+---------- + 16806 | 60 +(1 row) +</programlisting> + </para> + + <para> + Each page is typically 8 kilobytes. <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: +<programlisting> +play=# SELECT relname, relpages +play-# FROM pg_class +play-# WHERE relname = 'pg_toast_16806' or +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> + + <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> + + <sect1 id="logfile-maintenance"> <title>Log File Maintenance</title> -- GitLab