さて、私は新しい会社に引っ越しましたが、OpenNMSを実行するための単一のPostgreSQLデータベースがここにあることがわかりました。
私はMySQLの人で、PostgreSQLにまったく精通していませんが、少なくともpsql
とpostgres -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に達するまでこれを実行し続ける必要があるのか、それとも間違っているのかということです。
私は以前にこの問題にぶつかったことがあります。以下は私がそれを修正した方法からの私のメモです
エラーが便利に示唆しているように、バキュームを実行して問題を修正する必要があります。これを行うには、まず、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