[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 メーリングリストの案内