CakePHP: the rapid development php framework

PostgreSQLでDBサイズを調べる

投稿日: 2014-06-16

自分のプロジェクトで利用しているDBだけであるならば
SELECT pg_database_size('hogehoge');
で一発で現在アクセスしているDBのサイズを引くことができる。

この使い方だと同一サーバの全DBのサイズを調べることはできない。このため自分がサーバ管理者であった場合、サーバ全体のディスク容量を監視し、各DBの管理者に対してキャパシティ警告などをする用途には使用できない。

SELECT datname, pg_size_pretty(pg_database_size(datname)) FROM pg_database;

このようにすれば、pg_databaseテーブルの全DBについてpg_database_sizeが値を返す、というだけのことであった(^^;
たしかにpg_database_size関数自体はリストを受け取れないが、上記SQLであれば1タプルごとに値を返すので問題なしである。

ただpg_databaseテーブル自体は通常public readのようなのだが、pg_database_size()を使うためにはそれぞれのDB自身に対するパーミッションが必要となる。
このため、Postgresアカウントなど以外で複数のプロジェクトが含まれているサーバに対して上記問合せを行なうと、パーミッションエラーとなる可能性がある。

まあ、全DBの容量を確認したい、というようなニーズは個別プロジェクト管理者ではなくDBAのお仕事と思うので、問題にはならないだろうが、通常のログインロールでSQL発行してエラーとなったので、一応Tipsもどきとしてメモを残しておくこととする。

あとpg_size_pretty()関数について簡単にメモ。

pg_size_prettyは、適切にkB、MB、GB、もしくはTB単位を使用して目で見て判るようにその他の関数の1つの結果を整形するのに使用可能です。
と公式マニュアルに記載があるように、与えられた数値を自動的に表示変換をしてくれる。
可読性が高くなるので◎。
ただし横比較でボリューム比較をしたい場合は、逆に直感的にわかりにくくなるので、ここは適宜使い分けだろう。

もし、極端にDB領域を使っているプロジェクトをあぶりだしたいのであればpg_size_prettyを使わないほうが良い。

SELECT datname, pg_database_size(datname)/1000000 FROM pg_database;

こんな感じでだいたいxxMBくらい、という感じにするのがいいだろう。

システム管理関数群は、今まで真面目に読んだことがなかったので、今回を機にちょっと読んでおくこととしよう。


[一覧に戻る]