この章では PostgreSQL データベースシステムのディスク使用量を監視する方法について説明します。現行リリースでは、データベース管理者はディスク上の領域のレイアウトについてはあまり制御できません。ですから、この章ではオペレーティングシステムツールを使用してディスク使用量を管理する方法についての有益な情報となり、また、ヒントを提供します。
各テーブルには、データの大部分が格納されるプライマリヒープディスクファイルが備わっています。また、列にある長い値を格納するためには、テーブルに関連付けられた 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キロバイトです。(relpages はVACUUMとANALYZEによってのみ更新されることに注意してください。)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を参照してください。 これには各データベースのディスク使用量を表示するスクリプトが含まれています。