2016-10-10 19 views
1

PHPのPDO(またはそれぞれPostgreSQL driver)に、TCPキープアライブプローブlike JDBCを有効にするための接続設定オプションがありますか?TCPキープアライブPDO接続パラメータ

5分後に接続を切断するNATを使用して接続している(これは変更できません)という問題が発生しています。外部のPostgresインスタンスで実行しているクエリは、実行するのに5分かかるため、私たちのクライアントはPostgresのインスタンスから応答を受信せず、最終的にタイムアウトします。

echo 250 > /proc/sys/net/ipv4/tcp_keepalive_time 

(クレジットクリス・メリック)PDO PostgreSQLのドライバはlibpqのクライアントライブラリの上に構築されて

+0

私たちに多くの情報を与えてください。あなたはvpsまたはdediを使用しています、あなたのOSとバージョンは何ですか? sshログインしましたか? –

+0

@IvanBarayevどのような情報がこの質問に関連していますか?この質問は、pdoのpgsqlドライバがtcp keep alive probeを有効にするための具体的な設定に関するものです。 –

+0

ご迷惑をおかけして申し訳ありません。良いことがあります:) –

答えて

3

+0

これは私が探していたものです!ありがとうございました! –

2

あなたは、カーネルのキープアライブ時間を更新することができます。ドライバは、キーと値のペアの形式で特定のlibpq接続オプションをDSNに渡すことができます。その中には、TCPキープアライブオプションがあります。 PostgreSQL docから

キープアライブ

コントロールクライアント側のTCPキープアライブを使用するかどうか。デフォルト値は1で、これは0を意味します。これは、 キープアライブが望ましくない場合にはオフになります。このパラメータは、Unixドメインソケット経由で接続された 接続では無視されます。

keepalives_idle

は、TCPがサーバーにキープアライブメッセージを送信すべき後に非アクティブの秒数を制御します。ゼロの値は、システムのデフォルトである を使用します。このパラメータは、 Unixドメインソケットを介して接続した場合、またはキープアライブを無効にした場合は無視されます。 TCP_KEEPIDLEまたはTCP_KEEPALIVEソケットの オプションが利用可能なシステムでは、Windows上でのみ がサポートされています。他のシステムでは、 の効果はありません。

keepalives_interval

はサーバーによって確認されていないTCPキープアライブメッセージを再送信するまでの秒数を制御します。 の値がゼロの場合、システムのデフォルト値が使用されます。このパラメータは、Unixドメインソケット経由で接続された の場合、またはキープアライブが である場合は無視されます。これはTCP_KEEPINTVL ソケットオプションが利用可能なシステムとWindows上でのみサポートされています。他のシステムでは、 がありません。

例:

<? 
$db = new PDO('pgsql:dbname=mydb;host=localhost;user=myuser;password=mypass;keepalives_idle=60'); 
?> 
+0

これは実際に私の問題を解決するかもしれませんが、PDOのPostgreSQLドライバにTCP接続を管理するための設定オプションがあるかどうかという質問には答えません。さらにこの回答は、クライアントがLinuxカーネルを使用するOS上で実行されている場合にのみ適用されます。 –