Chapter 11. ディスク使用量の監視

Table of Contents
11.1. ディスク使用量の決定
11.2. ディスク容量不足

この章では PostgreSQL データベースシステムのディスク使用量を監視する方法について説明します。現行リリースでは、データベース管理者はディスク上の領域のレイアウトについてはあまり制御できません。ですから、この章ではオペレーティングシステムツールを使用してディスク使用量を管理する方法についての有益な情報となり、また、ヒントを提供します。

11.1. ディスク使用量の決定

各テーブルには、データの大部分が格納されるプライマリヒープディスクファイルが備わっています。また、列にある長い値を格納するためには、テーブルに関連付けられた TOAST ファイルと、TOAST テーブルのインデックスも備わっています。 TOAST ファイルは、テーブルの OID (実際には pg_class.relfilenode) に基づいた名前になります。基本テーブルに関連付けられたインデックスが存在することもあります。

ディスクスペースの監視は、次の3つの方法で行えます。VACUUM情報を使用してpsqlから、contrib/dbsizeを使用してpsqlから、およびcontrib/oid2nameを使用してコマンドラインから行う方法があります。最近VACUUM (またはANALYZE)を実行したデータベースに対してpsqlを使用すると、問い合わせを発行して任意のテーブルのディスク使用量を表示することができます。

play=# SELECT relfilenode, relpages
play-# FROM pg_class
play-# WHERE relname = 'customer';
 relfilenode | relpages
-------------+----------
       16806 |       60
(1 row)

1ベージは通常8キロバイトです。(relpagesVACUUMANALYZEによってのみ更新されることに注意してください。)TOASTテーブルによって使用されているスペースを表示するには、上記のヒープrelfilenodeに基づいた問い合わせを使用します。

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

同様にして、インデックスの使用量も簡単に表示できます。

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

psqlを使用して、サイズの大きなファイルを簡単に見つけられます。

play=# SELECT relname, relpages
play-# FROM pg_class
play-# ORDER BY relpages DESC;
       relname        | relpages
----------------------+----------
 bigtable             |     3290
 customer             |     3144

contrib/dbsize は、VACUUM/ANALYZE を必要とすることなく、psql内からテーブルまたはデータベースのサイズを確認できる関数を、データベースにロードします。

また、oid2nameを使ってディスク使用量を表示することもできます。使用例については、README.oid2nameを参照してください。 これには各データベースのディスク使用量を表示するスクリプトが含まれています。