[pgsql-jp: 35683] Re: pgpoolのfflush()におけるEAGAIN

Tatsuo Ishii t-ishii @ sra.co.jp
2005年 7月 6日 (水) 22:08:41 JST


石井です.

> > 山下と申します。
> > 
> > 現状FreeBSD4.11、postgresql7.4.8でpgpoolを使用していますが、
> > 大量のデータをやり取りする際にfflush()でEAGAINが発生しており
> > ます。この問題については pgsql-jp:35408 にて同様の問題が発生
> > している様子です。その際fflush() のリトライにより対処を試み
> > る案が石井様より提示されておりますが、色々と調べたところ問題
> > がありそうなのでポストさせて頂きました。
> > 
> > 資料として http://lc.linux.or.jp/paper/lc2005/CP-08.pdf> > 「5.6 nonblocking writeにおけるデータ消滅」にある記述では、
> > 
> > --以下引用
> > 書き込みバッファ内のデータがfflushされて書き込まれる時に
> > EAGAINで失敗した場合、stdioの実装によってはまだ書き込まれて
> > いないデータが捨てられてしまう場合がある。
> > --引用ここまで
> > 
> > となっております。有効な解決方法が見付かりましたら、また御報
> > 告させて頂きます。
> 
> 上記ペーパ見てみました.結局自前でstdio相当のものを実装するしかなさそ
> うですね.rubyは自前でstdioを実装しているそうなので,それをもらってく
> る手もありますが,ライセンスがGPLなのでそれもできないですね.
> 
> まあ,一から作ってもたいしたことないと思うので,地道に自分で何とかする
> ことにします.

もう一度 pgsql-jp:35408 を読み返してみましたが,FreeBSD の stdio ライ
ブラリが駄目な実装になっているのかも,という気がしました.つまり Linux
(あるいはglibcを使っているシステム)では起きないのかも(反例があったら教
えてください).時間ができたら FreeBSD のソースを見てみます.
--
Tatsuo Ishii



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