2011-06-30 19 views
0

PGSQL(9.0)クライアント(Windows)のセッションタイムアウトを制御する方法を探します。PostgreSQL:セッションタイムアウト?

セッションが終了すると、彼らの死後に何が起こったのですか?

強制的にセッションを強制終了できますか? (たとえば、間違った長い問合せで「ロックされています」。サーバーにリソースを強制的に解放する必要があります)。そのため

ありがとう:DD


は、私はそれを理解するために、これを拡張します。 データベースが死んでどのセッションを知る必要があります。 デッドセッションを解放する必要があるのは、リソースを保持しているだけで、この操作が完了していない場合、ロックを取得する必要があります。

その他のデータベース(FireBird、EDB)は、そのためのTimeOutパラメータを定義します。

セッションが終了すると、セッションは無効に設定され、ユーザー接続はアボートされました。

疲れを避けるには、期間を延長するために定期的に何かを行う必要があります。

Theresはタイムアウトに達する3つの方法です: 1.)クライアントプログラムがハングアップまたはフリーズまたはクローズしました。 2.)ネットワーク接続が壊れています 3.クライアントは、完了していない非常に長いクエリ/ストアドプロシージャを送信します。

タイムアウトがサーバによって処理されない場合、誰かのトランザクション、ロックなどがまだX時間稼動している可能性があり、それを削除するには1つの方法しか必要ありません.dbサーバサービスを再起動します。

他のデータベースはデッドセッションを処理するため、サーバーに対話する必要がないため、クライアントにエラーが発生したため、クライアントソフトウェアを再起動する必要があります。

一部のデータベースは、「非アクティブ」のセッションではなく「死んでいない」セッションへの復帰をサポートしており、作業を続行できます。

ので、この序文で私は再び私の質問をする:

  1. にはどうすればpgsqlの下、クライアントのセッションタイムアウトを制御することができますか?システム変数、SQLパラメータなど?
  2. この時間を延長するにはどうすればよいですか?
  3. 長いクエリで期間が使い果たされるとどうなりますか?
  4. pgsqlサーバはいつクライアントが保持するリソースを解放しますか?

ありがとう: DD

+0

私はこのようなPostgresの設定に気づいていません。私にとっては、アプリケーションで接続処理をうまくやっているように思えます。私が考えることができる唯一の "解決策"は、アプリケーションとデータベースの間にある接続プール(pg-poolやpgBouncerなど)を使用することです。プロキシとして機能するので、アプリケーションはそれを認識しません。 –

答えて

0

Theresはタイムアウトに達する3つの方法です:1.)クライアントプログラムがハングアップまたはフリーズまたはクローズしました。 2.)ネットワーク接続が壊れています。3.)クライアントは、完了していない非常に長いクエリ/ストアドプロシージャを送信します。 2については

tcp_keepalives_ *設定が役に立つかもしれない、:http://www.postgresql.org/docs/8.4/static/runtime-config-connection.html 3については

、そこのstatement_timeout設定です:http://www.postgresql.org/docs/8.4/static/runtime-config-client.htmlは、これが唯一の文ではなく、接続を終了します。

関連する問題