プロが教えるわが家の防犯対策術!

PostgreSQL8.1.4を利用しています。

1日約2万件のINSERTを行うデータベース
の保守を行う予定です。
PostgreSQLの保守にvacuumは欠かせないというのが
通説だとは思うのですが
データベースへの操作はINSERTとSELECTだけなため
VACUUMは要らないのでは?と思っています。
(少なくとも頻繁には必要ないのでは?)
但し、新しい子テーブルを毎日追加し、古いものをdropするということはやっています。

ご教授の程よろしくお願いいたします。

A 回答 (3件)

ズバリ必要です。


VACUUMを実行するする理由は大きく2つです。
・DELETE文やUPDATE文発行により断片化した領域の開放により
 アクセス速度の低下を抑制する。
・不要となったトランザクションIDの開放により、トランザクション
 IDのオーバーフローの抑制する。
今回、1つ目の項目を見て、不要と判断していると思いますが、
実は2つ目も非常に重要です。放置して、オーバーフローが発生すると
データは存在するけど、参照できないと言う事実上、致命的な破壊
現象を招く結果となります。
よって頻繁でないにしても、定期的にチェックは必要です。
私は、このIDを一日一回チェックするようにして、15億を超えていたら
VACUUM実行するようにスケジューリングしています。
幸い、Ver.7.4以上の場合、VACUUM中のDBアクセスも可能となりました
ので負荷は大きいですが、システムが停止する事はないと思います。
    • good
    • 0

PostgreSQL8.1からは自動VACUUMという機能が


入っているようです。
ちなみに、VACUUM実行中でもデータの更新作業が
できるようになったのは7.2のバージョンからです。
ただし、この場合のVACUUMはデータベースの領域自体は
解放しないので、データベースのファイルサイズは
小さくなりません。
領域を小さくしたい場合は-fオプションを付けて、
データベースをロックしたVACUUMを実行する必要が
あります。
7.1以前のVACUUMは常に、-fオプションを付けた動きに
なっています。
    • good
    • 0

UPDATEやDELETEをしないならvacuumはそれほど必要は


ないと思いますが、
PostgreSQL付属のマニュアル
(21.1.3. トランザクション ID の周回エラーの防止)
の部分に定期的なvacuumの必要性が書いて有ります。
cron等で定期的に"vacuumdb -a -z"と実行することを
お勧めします。
-fオプションを付けなければそれほど負荷が
かかることは無いと思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!