web-dev-qa-db-ja.com

postgres真空

さて、私は新しい会社に引っ越しましたが、OpenNMSを実行するための単一のPostgreSQLデータベースがここにあることがわかりました。

私はMySQLの人で、PostgreSQLにまったく精通していませんが、少なくともpsqlpostgres -Dを実行してシングルユーザーモードにする方法を学びました。

とにかく、OpenNMSがクラッシュしました。私は入ってPostgreSQLまで追跡し、このエラーを出しました:

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

実際には100万から始まり、ご覧のとおり965500まで下がっています。シングルユーザー(postgres -D)にログインし、Vacuumを完全に実行することで、この時点に到達しました。今、私はこれがそれをきれいにすることを期待しました、しかし結果は正確に55行です:

WARNING:  database "template1" must be vacuumed within 938861 transactions
HINT:  To avid a database shutdown, execute a full-database VACUUM in "template1".
WARNING:  database "template1" must be vacuumed within 938860 transactions
HINT:  To avoid a database shutdown, execute a full-database VACUUM in "template1".
WARNING:  database "template1" must be vacuumed within 938861 transactions
HINT:  To avoid a database shutdown, execute a full-database VACUUM in "template1".
WARNING:  database "template1" must be vacuumed within 938860 transactions
HINT:  To avoid a database shutdown, execute a full-database VACUUM in "template1".

だから私が持っている質問は、私が0に達するまでこれを実行し続ける必要があるのか​​、それとも間違っているのかということです。

2
Benny B

私は以前にこの問題にぶつかったことがあります。以下は私がそれを修正した方法からの私のメモです

エラーが便利に示唆しているように、バキュームを実行して問題を修正する必要があります。これを行うには、まず、postgresをシャットダウンしますSudo /sbin/service postgresql stop

次に、各データベースを調べて、スタンドアロンのバックエンドでバキュームを実行する必要があります。 postgresユーザーとして実行:postgres -D /opt/pgsql/data/ postgres

ここで、/ opt/pgsql/dataはpostgresのデータディレクトリへのパスであり、postgresは修正するデータベースの名前です。

次のようなプロンプトが表示されます。

PostgreSQLスタンドアロンバックエンド8.1.18

バックエンド>

バックエンド>プロンプトでVACUUMと入力するだけです。

警告:データベース「template1」は999407トランザクション内でバキュームする必要がありますヒント:データベースのシャットダウンを回避するには、「template1」でフルデータベースVACUUMを実行します。

警告が表示されなくなるまで、毎回DBNAMEを変更しながら、手順を繰り返します。その場合、postgresを再起動すると、すべてが正常に戻ります。

編集:私たちがこのプロセスを数回行った後、私はまた言及する必要があります。自動バキュームプロセスを実装することにしました: http://www.postgresql.org/docs/8.1/static/maintenance.html#AUTOVACUUM

5
Alex