[pgsql-jp: 39110] Re: データディレクトリが突然使用できなくなったことを検知する設定について

EBIHARA, Yuichiro ebihara @ iplocks.co.jp
2008年 1月 30日 (水) 17:14:44 JST


こんにちは、海老原です。
同じ悩みをOracleでもMySQLでも聞いたことがあります。

> このとき、PostgreSQLがSELECTやINSERTのときに
> 常にエラーを返すわけではないことを知りました。
> 手元の環境で、PostgreSQLを起動後、データディレクトリをmvした後に、
> INSERTやSELECTが成功することを確認しました。

たぶんそれは、PostgreSQLのバックエンドプロセスがアクセス対象ファイルを
既にオープンしていて、そのiノードを掴んでいるので、mvしても依然として
アクセスできてしまうからではないでしょうか。(rmも同じ)

未オープンのファイルにアクセスが発生したり、別のセッションをつなげて
新しいバックエンドプロセスが立ち上がったりすれば、その時点でファイル
オープンエラーになるような気がします。
後者はpgpoolだと発生しにくいですよね。

なので、アンマウントとかディスククラッシュをシミュレートするのに、
mvコマンドは不適切なのだと思います。
例えば、USBメモリ上にDBファイルを配置し、稼動中に引っこ抜いたりすれば
簡単にI/Oエラーが出るんじゃないでしょうか。

> もし、設定がないようならば、
> 定期的にデータディレクトリの有無をチェックし、
> データディレクトリがない場合に、
> PostgreSQLのプロセスを強制終了させるようなプログラムを
> 開発しようと思っています。

上記の推測が正しければ、これは無用だと思います。
いつかきっとエラーが出ますし、それまでのI/Oは問題なく成功しているという
ことになるはずですから。

--
海老原 雄一郎 / EBIHARA, Yuichiro
  Email: ebihara @ iplocks.co.jp





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