[pgsql-jp: 34646] PostgreSQLでデータベースのサイズを監視するには?

和泉由美子 izumi-yumiko @ tokyo.scnet.co.jp
2005年 1月 14日 (金) 20:18:27 JST


お世話になっております。和泉です。

昨年からずっとPostgreSQLのデータベース領域監視処理
を作っております。

使用しているバージョンは7.3.4ですが、7.3.8か7.4.6も
今後使う予定です。

現在、以下のように実装しようとしています。

1)pg_classより指定されたデータベースの全テーブル名を取得
2)1)のテーブル全てに対し、pgstattupleを実行
3)2)の結果を計算する

この実装で、
 データベース サイズ
 データベース 使用量
 データベース 空き容量
 データベース 使用率
 データベース フラグメンテーション率
を求めようとしています。

ただし、サイズだけはcontrib/dbsizeで取得でき、その結果と
比較すると、pgstattupleの結果よりも大きなサイズが取得され
ます。(当然かもしれませんが・・・)

たとえば、こんな感じです。

<dbsizeの結果>
postgre=# select database_size('aaa');
 database_size
---------------
     106889460
(1 row)

<pgstattupleの結果>
totalsize = 35381248
usedsize = 28778787
usedpercent = 81.33
deadsize = 592968
tablefragmentation = 1.67
freesize = 4798104
freepercent = 13.56

ここで質問ですが、以下教えていただけないでしょうか?

・上記結果の差分にはどんな情報が含まれているのでしょうか?
・上記pgstattupleによる領域監視で、サイズや使用量に関する
 情報は十分でしょうか?
 (可能なら、上記pgstattupleによる実装で「領域監視」を
  行うことを開発アプリケーションのルールにしようと考えて
  います。)
・これ以外に領域情報を取得するライブラリなどはありますか?
 「[pgsql-jp: 34327] Re: データベースの使用量などを取得する方法」
 にて、以前スクリプトによる取得方法を教えていただいたのですが、
 シェルでの実行とpsqlの実行回数の多さがネックになり、取り込む
 ことができませんでした。
 条件は、
  1.SQL文だけで実行できること
  2.データベース名だけ指定すれば動作すること
  3.FUNCTIONを作らないこと
 です。

以上よろしくお願いします。




pgsql-jp メーリングリストの案内