トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   一覧 最終更新   ヘルプ   最終更新のRSS
 


動作確認ディストリビューション

シングルユーザーモードでのVACUUM

ここではPostgreSQLをシングルユーザーモードで起動し、VACUUMを実施する方法を説明します。

追記型DBであるPostgreSQLは性能劣化を避けるため「VACUUM」というコマンドが準備されており、これにより、DBの最適化処理を行いますが、時として「VACUUM」でもどうしようもないような事態が発生する場合があります。
それが、以下のような例です。このような状態になると、PostgreSQLは起動しているものの(netstatで確認するとLISTEN状態)、psqlコマンドも接続を受け付けず、PostgreSQLの再起動を行っても状況が改善しないといった感じです。

# /usr/local/pgsql/bin/vacuumdb -U postgres -a -z -v
vacuumdb: could not connect to database postgres: FATAL:  database is not accepting commands to avoid wraparound data loss in database "VACUUMできないDB名"
HINT:  Stop the postmaster and use a standalone backend to vacuum database "VACUUMできないDB名".

上記のメッセージ内に「postmasterを停止後、スタンドアロンバックエンドを起動し、VACUUMせよ」と表示されているため、指示に従い、シングルユーザーモードでPostgreSQLを起動し、VACUUMを行います。

まず、PostgreSQLを停止します。

# service postgresql stop

または

# su - postgres
$ /usr/local/pgsql/bin/pg_ctl stop -D /usr/local/pgsql/data

シングルユーザーモードでPostgreSQLを起動します。

# su - postgres
$ /usr/local/pgsql/bin/postgres --single -D /usr/local/pgsql/data VACUUMできないDB名

PostgreSQL stand-alone backend 8.3.6
backend>

VACUUMを実施します。

backend> VACUUM

シングルユーザーモードを終了。

Ctrl + D

PostgreSQLを起動。

# service postgresql start

または

# su - postgres
$ /usr/local/pgsql/bin/pg_ctl start -D /usr/local/pgsql/data
  • 関連書籍
    #amazon(477412687X,center,)#amazon(4844321080,center,)#amazon(4798123358,center,)#amazon(4873111021,center,)#amazon(4774122688,center,)

Last-modified: 2009-04-27 (月) 23:26:25 (3550d)