« Google AdWordsに広告を出してみた | トップページ | App Storeはほとんど死んだ »

2011/06/09

PostgreSQLのVACUUM

ずいぶん昔から運用されていたサービスのPostgreSQLサーバーからエラーメッセージが出るようになりました。

WARNING: database "databasename" must be vacuumed within 1000000 transactions
HINT: To avoid a database shutdown, execute a full-database VACUUM in "databasename".

PostgreSQLでは、定期的にVACUUMというメンテナンス作業をしないと、
トランザクションが解決できずにたまっていってしまいます。

それが1000万回を越えると、いっさいのINSERT文やSELECT文も実行できなくなるという
なんとも致命的なデータベースなのです。

問題に気がついたときは920万回のトランザクションがたまっていました!

さすがにこのままでは危ないので、サービスの緊急メンテナンスをアナウンスして
VACUUM FULLをかけようと思います。

手順を自分用にメモっておきます

まずはPostgreSQLを停止。
続いてpostgresユーザーにチェンジして
postgresql -D /home/データベースの場所 DB名
でバックエンドモードで起動して

VACUUM FULL VERBOSE
とコマンドを実行。

ただ、いつになったら終わるんだ・・・という絶望的な状況。

PostgreSQLの新しいバージョンはVACUUMが無くても動くようになったという話を
聞きましたので、そちらに入れ替えた方がいいのかなー。
とはいえ、サービス自体、止めるかもしれないものなので。悩みます。

« Google AdWordsに広告を出してみた | トップページ | App Storeはほとんど死んだ »

コメント

コメントを書く

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

トラックバック

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

この記事へのトラックバック一覧です: PostgreSQLのVACUUM:

« Google AdWordsに広告を出してみた | トップページ | App Storeはほとんど死んだ »