- - PR -
PostgreSQLデータベースサイズについて
1
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 2006-10-20 13:40
お世話になります。
現在、PostgreSQLをLinux環境下にて運用しております。 日中の業務にて、データベースの更新や削除を行っているため、毎日深夜、vacuumdbをしております。オプションは、--fullと--verboseをつけています。 データベースのデータは、/usr/local/pgsql/data/内に格納してあります。 現在本番環境の、データベースのディレクトリサイズが6GByteになっているのですが、 そのデータベースを退避したデータ(プレインテキスト形式)をテストサーバにリストアすると、1GByte強になります。退避したデータは、tar.gz形式にて60MByte程です。 日々、データベースのサイズが大きくなっており、パーティション容量がいっぱいになってきております。 素人考えですが、テスト環境では、1GByte程の容量である為、本番環境では、何か日々のゴミのようなものが残ってしまっているような気がします。 どなたかどのような原因にてデータベースサイズが大きくなってしまっているか、 お分かりになる方がいらっしゃいましたら、ご教授して頂けないでしょうか。 ヒントになるような事でもかまいません。よろしくお願いいたします。 本番サーバ&テストサーバ OS:Redhat Enterprise Linux ES Ver3 RDBMS:PostgreSQL7.3.3 |
|
投稿日時: 2006-10-23 07:33
インデックスの再作成をおこなってみて下さい。
primary key がある場合はindexが作成されます コマンド REINDEX TABLE name 注意:REINDEX はテーブルの排他的ロックを獲得します 参考 PostgreSQL 7.3.4 管理者用ガイド 8.3 定常的なインデックスの再作成 VACUUM を実行してもサイズが減らない場合の記載があります 管理者用ガイド 11.1. ディスク使用量の決定 postgresqlのシステムテーブルから現在の状況を知るsqlの記載があります 上記マニュアルをもとに簡単なSQLを書いてみて実行しました relnameがテーブル名 SELECT c2.relname, c2.relpages FROM pg_class c, pg_class c2, pg_index i WHERE c.relname = 't_test' AND c.oid = i.indrelid AND c2.oid = i.indexrelid ORDER BY c2.relname; relname | relpages -------------+---------- t_test_pkey | 1 (1 row) WEB+DBプレス2006 Vol.34 (今月書店にありました)P202から PostgreSQL安定運用のコツ で性能劣化とメンテナンスの記事も参考になります |
|
投稿日時: 2006-10-23 14:27
99ri様
レスありがとうございました。 REINDEXを行っておりませんでした。 その結果、データ領域が肥大したと思われます。 なので、REINDEXのところを調べた結果、 古いバージョンのPostgreSQLでは、INDEXのところは、 VACUUMしてくれないと書いてあり、REINDEXを定期的に行わなければ、 サイズがどんどん増えていく旨が書かれていました。 99ri様のおっしゃる通り、REINDEXを定期的に行っていきたいと思います。 いろいろとありがとうございました。 |
1
