PostgreSQLデータベースがディスクを圧迫したので
お客さんに貸してるサーバのディスク容量が残りわずかになってしまった。原因はわかっている。PostgreSQLのメンテナンスが不十分だったからだ。サーバの中にはいくつかのPostgreSQLデータベースが稼動しているが、果たしてどれが原因なのか。どのデータベースがどれだけの容量を使用しているのか調べたのでメモ。
まずPostgreSQLのデータがあるディレクトリに移動する。RedHat系OSでは以下の場所に存在する。
/var/lib/pgsql/
おなじみ、設定ファイル等が設置されている場所だ。この中の奥の階層にデータは格納されている。
/var/lib/pgsql/data/base/
上記の中に入ると、数字だけで構成されたディレクトリが多数存在する。しかも多段の階層で。これだけでは意味がわからない。まずここで、直下の階層についてのみ容量をチェックする。
du –max-depth=1 -h
階層を一つ下って、人間が理解しやすい形式でデータを出力させる。これでひとまず、どのディレクトリがディスクを浪費しているのか把握できる。しかしこのディレクトリ名は何を意味しているのか。
どうやらこれはoidを意味しているらしい。そこでoidとデータベース名を関連付けることさえできれば、どのデータベースがどれだけ容量を使用しているか把握できることになる。それを把握するためのSQL文がコレ。
select datid,datname from pg_stat_database;
これでoidとデータベース名の関連付けができる。
さて、どのデータベースに問題があるのかはすぐにわかったが、どうやって処理しようか。それを現在考え中。頭の痛い課題だ。