Postgresサーバーのタイムアウトを制限することは可能ですか?


16

アプリケーション(クライアント側)で接続とコマンドのタイムアウトを10分に設定します。

私のアプリケーションよりも簡単なクエリを実行します: SELECT pg_sleep(65)

一部のサーバーでは正常に動作しますが、他のサーバーは60秒後に接続を閉じます。

これは、タイムアウトを制限し、クライアント設定を無視するPostgreSQLサーバーの構成のようなものでしょうか?


現在のタイムアウトを確認するには:SHOW statement_timeout;
ユーザー

回答:


26

はい、可能です

ドキュメントに2つの設定が記載されていますidle_in_transaction_session_timeoutバージョン9.6xの新機能です)

  • statement_timeout (整数)

    コマンドがクライアントからサーバーに到着した時点から、指定されたミリ秒を超える時間がかかるステートメントを中止します。log_min_error_statementがERROR以下に設定されている場合、タイムアウトしたステートメントもログに記録されます。値ゼロ(デフォルト)はこれをオフにします。

    すべてのセッションに影響するため、postgresql.confでstatement_timeoutを設定することはお勧めしません。

  • idle_in_transaction_session_timeout (整数)

    指定されたミリ秒単位の期間よりも長い間アイドル状態になっている開いているトランザクションでセッションを終了します。これにより、そのセッションで保持されていたロックを解除し、接続スロットを再利用できます。また、このトランザクションにのみ表示されるタプルをバキュームすることができます。この詳細については、セクション24.1を参照してください。

    デフォルト値の0は、この機能を無効にします。

アミューズメントが必要な場合を除き、postgresql.confを設定しないことが重要statement_timeoutです。

これが動作する例です

SET statement_timeout = 10000;
SET
test=# SELECT pg_sleep(15);
ERROR:  canceling statement due to statement timeout

どちらの設定も構成ファイルに存在しないため、デフォルトを使用しています。:(他のアイデア?
アンジェイGIS

@gisek確かに、ローカルIPスタックまたはファイアウォールのいずれかで、ネットワークレベルの何かである可能性があります。
エヴァンキャロル

4

箱から出していない。ただし、設定を無視したカスタムサーバーをコンパイルするのは非常に簡単です。

しかし、より多くの可能性は、接続がアイドル状態の接続を好まないファイアウォールまたはゲートウェイによって切断されることです。

サーバーのログファイルにアクセスできる場合、それは良い手がかりを与えるはずです。クライアントがサーバーが予期せず接続を閉じたと言い、サーバーがクライアントが予期せず接続を閉じたと言った場合、おそらく実際に接続を切断しているのはクライアントとサーバーの間にあるものです。


それは間違いなくカスタムコンパイルされたサーバーではありません -apt-getからの通常のものだけです。ファイアウォールとゲートウェイのリードについてさらに詳しく説明していただけますか?確認して修正するにはどうすればよいですか?
アンドジェジギス

-2

はい、可能です。設定が必要な接続パラメーターがいくつかあります。

以下のリンクを参照してください。 https://jdbc.postgresql.org/documentation/head/connect.html

loginTimeout connectTimeout socketTimeout cancelSignalTimeout


2
これらはデータベース接続のクライアント側の設定であり、クライアントを切断するためにサーバーで構成できる設定ではありません。OPはサーバー側の接続タイムアウト設定を探しています。
ジョン別名hot2use
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.