« Eclipseで行番号を表示 | トップページ | PostgreSQLでロック競合の"深さ"を可視化する »

2014.06.16

PostgreSQLでDBサイズを調べる(再)

[PostgreSQLでDBサイズを調べる]というエントリーに対してコメントをいただいた。
pg_size_pretty()というシステム管理関数を利用してスマートに表示を取得していたので紹介したい。

SELECT datname, pg_size_pretty(pg_database_size(datname)) FROM pg_database;
これがご紹介いただいたサイズ一覧取得用SQL。 私は小難しく考えすぎていただけで、
SELECT datname, 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くらい、という感じにするのがいいだろう。

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

|

« Eclipseで行番号を表示 | トップページ | PostgreSQLでロック競合の"深さ"を可視化する »

コメント

昨日、DBサイズでコメントした者です。
ロールの事も参考になり、Goodな記事だと思います。

ちなみに、「部分インデックス」で検索してこちらのサイトに来て、たまたまDBサイズの記事を読んでコメントしました。
ただの通りすがりです(笑

投稿: 昨日のコメント者 | 2014.06.16 21:00

再コメントとお褒めのお言葉恐縮です^^
PostgreSQLはこの数年集中的に取り組んでいるテーマなので、また時々遊びに来ていただけるとうれしいです。
今後ともよろしくお願いいたします。

投稿: かっしい | 2014.06.18 09:45

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/2022/59824671

この記事へのトラックバック一覧です: PostgreSQLでDBサイズを調べる(再):

« Eclipseで行番号を表示 | トップページ | PostgreSQLでロック競合の"深さ"を可視化する »