[pgsql-jp: 36534] Re: PostgreSQL のデータ領域を NAS 上にした場合

Kouji Ito kouji @ cty-net.ne.jp
2005年 12月 12日 (月) 22:57:15 JST


伊藤です。
> 
> CIFS についてはわかりませんが、NFS ではうまく行かないかと思います。
> NFS サーバは、実際にディスクに書き込みを行う前にクライアントに
> 「成功」の応答を返してしまいます。
> 
> そのため、クライアント(PostgreSQL) が fsync() を行っても
> 実際にはまだディスク上に書かれていないということがあります。
> (そうならないようなサーバ側の設定もあったように思いますが、
>   詳しくは知りません)
>
なるほど、fsync()を行ったにもかかわらずサーバ側でキャッシュされて
しまっていると、そのキャッシュがフラッシュされるまでにサーバが
クラッシュするとDBの整合性が崩れるというケースはありそうですね。

PostgreSQLって1回のトランザクションを行うにあたって、必ずディスク
にデータを書き戻してるんでしょうか?
一旦、共有メモリ内で書き込みが完結(クライアントにトランザクション終了を
通知)して、非同期に共有メモリの内容をディスクにフラッシュしているんだと
すると、ローカルディスクであっても、マシンのクラッシュなどで、DBの整合
性が保てなくなるケースがありそうな気がします。

ローカルなファイルシステムであれ、NASであれ、最終的にpostmasterの
fsync()によってディスクへの書き込みが行われるのであれば、DBの整合性
に関しては、同等(ローカルディスクのケーブル断とLANケーブル断は最終的に
fsync()のエラーとして検出できる)と考えていたのですが、そうではない
ケースもあるみたいですね。

NFSサーバのライトキャッシュに関しては、NFSv2と、NFSv3で随分違うみたいですね。
ちょっと、調べて見ます。

> PostgreSQL ではない別の DBMS の話ですが、
> NFS 上にボリュームを置いている DB が時々壊れるという経験を
> したことがあります。
> 
> ネットワーク障害が発生した時に NFS のレイヤで
> 固まってしまうのも気になるところです。
>
システム構成や、使用機器の信頼性にも寄るので一般的な比較は難しいのですが、
PostgreSQLを動作させるサーバと、NASの間のネットワークを専用のネットワーク
(例えばクロスケーブルで直結とか)としてやれば、それなりの信頼性は持たせ
られるんじゃないかと考えておりました。

NetApp社のNASは、Oracle社から正式に認定されているみたいですが、
やっぱり、このあたりのチューニングがなされているんでしょうね。

> 中途半端な情報で申し訳ありませんが、ご参考まで。
> 
> 
いえいえ、こちらこそ貴重な意見ありがとうございます。




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