[pgsql-jp: 34647] Re: PostgreSQLでデータベースのサイズを監視するには?
Tatsuo Ishii
t-ishii @ sra.co.jp
2005年 1月 14日 (金) 21:54:13 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による領域監視で、サイズや使用量に関する
> 情報は十分でしょうか?
> (可能なら、上記pgstattupleによる実装で「領域監視」を
> 行うことを開発アプリケーションのルールにしようと考えて
> います。)
> ・これ以外に領域情報を取得するライブラリなどはありますか?
> 「[pgsql-jp: 34327] Re: データベースの使用量などを取得する方法」
> にて、以前スクリプトによる取得方法を教えていただいたのですが、
> シェルでの実行とpsqlの実行回数の多さがネックになり、取り込む
> ことができませんでした。
> 条件は、
> 1.SQL文だけで実行できること
> 2.データベース名だけ指定すれば動作すること
> 3.FUNCTIONを作らないこと
> です。
pgstattupleのインデックス版を作るしかないと思います.
--
Tatsuo Ishii
pgsql-jp メーリングリストの案内