ディスク使用量の監視

PostgreSQL 8.0.0 文書
前のページ | 巻戻し |  | 早送り | 次のページ

# 第 24章ディスク使用量の監視

この章では PostgreSQL データベースシステムのディスク使用量を監視する方法について説明します。

# 24.1. ディスク使用量の決定

各テーブルには、データの大部分が格納されるプライマリヒープディスクファイルが備わっています。 もしテーブルが、可能な限りの値を持つ列を持つときは、テーブルに関連付けられた TOAST ファイルもあります。 このファイルは、メインテーブルに収納するには大きすぎる値をテーブルに格納するために使用されます（項49.2を参照してください）。 TOAST テーブルが存在する場合は、そのテーブルにインデックスが1つあります。 基本テーブルに関連付けられたインデックスが存在することもあります。 テーブルとインデックスはそれぞれ別のディスクファイルに格納されます。 このファイルが1ギガバイトを超える場合は、複数のファイルになります。 これらのファイルの命名規約について項49.1で説明します。

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

    SELECT relfilenode, relpages FROM pg_class WHERE relname = 'customer';

     relfilenode | relpages
    -------------+----------
           16806 |       60
    (1 row)

1ベージは通常8キロバイトです。 (`relpages` は`VACUUM`と`ANALYZE`、さらに`CREATE INDEX`といった幾つかのDDLによってによってのみ更新されることに注意してください。) `relfilenode`の値は、テーブルのディスクファイルを直接調べるときに役に立ちます。

TOASTテーブルが使用している領域を示すために、次のような問い合わせを実行してみましょう。

    SELECT relname, relpages
        FROM pg_class,
             (SELECT reltoastrelid FROM pg_class
              WHERE relname = 'customer') ss
        WHERE oid = ss.reltoastrelid
           OR oid = (SELECT reltoastidxid FROM pg_class
                     WHERE oid = ss.reltoastrelid)
        ORDER BY relname;

           relname        | relpages
    ----------------------+----------
     pg_toast_16806       |        0
     pg_toast_16806_index |        1

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

    SELECT c2.relname, c2.relpages
        FROM pg_class c, pg_class c2, pg_index i
        WHERE c.relname = 'customer'
            AND c.oid = i.indrelid
            AND c2.oid = i.indexrelid
        ORDER BY c2.relname;

           relname        | relpages
    ----------------------+----------
     customer_id_indexdex |       26

この情報から、サイズのもっとも大きなテーブルとインデックスが簡単に見つけられます。

    SELECT relname, relpages FROM pg_class ORDER BY relpages DESC;

           relname        | relpages
    ----------------------+----------
     bigtable             |     3290
     customer             |     3144

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

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

前のページ | ホーム | 次のページ
ロックの表示 | 上に戻る | ディスク容量不足