[pgsql-jp: 27968] Re: vacuumが失敗する事例について

SFL)深尾 太輔  fukao.d @ sfl.fujitsu.com
2002年 11月 13日 (水) 17:19:12 JST


深尾@滋賀富士通です

吉村さん、早速の情報ありがとうございます。

> >ERROR:  Can't create lock file.  Is another vacuum cleaner running?
> >If not, you may remove the pg_vlock file in the
> >               /usr/local/pgsql/data/base/testdb
> >
> >確認したところ、以下のファイルが存在していました。
> >
> >   /usr/local/pgsql/data/base/testdb/pg_vlock
> 
> エラー出力にある通り、ロックファイルを削除するようにされてはどうでしょうか。
> 本来であれば、ロックファイルが存在し、かつvacuumdbプロセスが存在しないことを
> 確認すべきですが。
> 
> if [ -f /usr/local/pgsql/data/base/testdb/pg_vlock ] ; then
>     rm -r /usr/local/pgsql/data/base/testdb/pg_vlock
> fi
> if [ -x /usr/local/pgsql/bin/vacuumdb ] ; then
>     /usr/local/pgsql/bin/vacuumdb -d testdb
> fi
こちらの方でも調べながらやっていてわかったことですが、if [ -x ファイル名 ]
は、指定したファイルに実行権限があるかどうかを判断するためのものみたいで
す。なお、ロックファイルが存在するかつvacuumdbプロセスが存在しないことを
判断するにあたって、以下の記述で出来ました。
  if [ ps -ef | grep vacuumdb | awk '{print $8}' != "vacuumdb" ]
  then
    if [ -f /usr/local/pgsql/data/base/testdb/pg_vlock ]
    then
	rm -f /usr/local/pgsql/data/base/testdb/pg_vlock
    fi
  fi
PostgreSQLというよりはLinuxのシェルの話になってしまいますが(^^;)

> >vacuumに失敗する事例等があれば教えて頂けますでしょうか?
> 
> 私が経験したことでは、vacuum中もしくはvacuumを開始する前にバックエンドが落ち
> てしまっていたのが原因でvacuumが実行されないことがありました。これはcronの設
> 定ミスでvacuumが終了する前にバックエンドをリスタートしてしまっていました(^^;
> 
> あとはデーターベースに指定している文字コード以外の文字コードが含まれていた時
> にはvacuumができなくなったと記憶しています。
> 
なるほど、参考になります。
試してみたところ、vacuumを実行中にpg_vlockを削除すると、トランザクション
がアボートしてしまいました。
この他に、vacuumを実行中にトランザクションをアボートさせてしまう処理など
がありましたら教えていただけないでしょうか?

よろしくお願い致します。

--------------------------------------------
 株式会社滋賀富士通ソフトウェア
 深 尾 太 輔(Fukao Daisuke)
  E-mail  : fukao.d @ sfl.fujitsu.com
--------------------------------------------




pgsql-jp メーリングリストの案内