[pgsql-jp: 41043] Re: トランザクション中のネットワーク切断

Hiroki Kataoka kataoka @ interwiz.jp
2012年 1月 28日 (土) 18:40:41 JST


片岡です。

tcp_keepalives_idleとtcp_keepalives_intervalの設定は、9.0からWindowsネイティブ版でも対応したようですね(関連コードが2010年7月8日にMagnusさんによってコミットされてました)。
tcp_keepalives_countについてはWindowsのAPIがサポートしてないので対応不可ということのようです。

2012年1月28日16:51 MauMau <maumau307 @ gmail.com>:
> MauMauです。
>
> 片岡さんの言われるように、8.3のマニュアルでは、
> Windowsでtcp_keepalives_xxxが使える/使えないという記述がないのに対し、
> 9.1のマニュアルではWindowsについての記述があります。
>
> ソースコードでも、9.1ではWindows用の専用コードの中で、
> WSAIoctl()を使って、
> tcp_keepalives_idleとtcp_keepalives_intervalの設定を適用しています。
> tcp_keepalives_countの設定は有効にならないようです。
> 一方、8.3のソースコードでは、そのような処理がありません。
> 8.3ではtcp_keepalives_xxxの設定は有効にならないということでしょうか。
>
> もしレジストリの値の変更によってPostgreSQL以外のプログラムに影響が及ぶのを心配するならば、
> PostgreSQL 9.1を使うのがよいと思います。
>
>
> 以上です。
>
> From: "Hiroki Kataoka" <kataoka @ interwiz.jp>
>
>>>> コネクション断は、LinuxやWindowsのデフォルトでは2時間少々で検出されます。つまりその間はロックされっぱなしになる可能性があります。
>>>>
>>>> もっと早いタイミングで検出したいなら、通常はpostgresql.confで
>>>> tcp_keepalives_idle
>>>> tcp_keepalives_interval
>>>> tcp_keepalives_count
>>>> を設定すればOKですが、残念ながらWindowsではnot
>>>>
>>>> suppoertedで機能しません。Windowsで対策をするなら、レジストリを書き換えてOSのデフォルト設定(2時間)を変更するしかないと思います。
>
>



-- 
Hiroki Kataoka


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