0

私は尋ねました:レジスターの何も変更せずにキープアライブpostgreSQLによって接続TCP / IPを切断する方法は?

そして今、私は確認したい:

私のシステム(C#.NET、NHibernate、およびActive Record)は、データベースPostgreSQL8.4とWindowsServerで実行されています。アイドル状態または失われたTCP/IP接続を切断し、データのブロックを解除する方法が必要です。

OSの設定を微調整したり、PostgreSQLを再コンパイルしたりすることはできません。私のシステムは、必要に応じてOracle10gExpressで実行できます。知っておくべきこと:PostgreSQLの新しいパッチを実装せずにアイドル状態の接続を解除できますか?そのためにデータベースをOracleに移行する必要がありますか?

ありがとう、

4

2 に答える 2

1

新しい接続ごとに接続時にクエリを実行するように強制する方法がある場合は、いくつかの基準にあるプロセスに対して「pg_terminate_backend(pid)」を動的に呼び出すデータベース関数を作成できます。設定を知らなくても、いくつかの可能性があります。

  • current_query ='トランザクション内'およびCURRENT_TIMESTAMP-query_start()が何らかの値(1分?5分?)より大きい接続
  • 現在使用していないIPアドレスまたは個々のユーザー名(存在する場合)からの接続(ただし、接続プール環境ではおそらくお勧めできません)

個人的には、トランザクションを開くことができる時間を最小限に抑えるために、リファクタリングを試みます。トランザクションが不必要に開かれ、問題が発生する可能性が高くなる可能性がある場所:

  • AutoCommitをオフにしてORMを実行しています。
  • 編集画面でデータを読み込むとLOCKが発生するため、書き戻す前にデータを更新することはできません。書き戻す前に、競合がないことを確認してもよい場合があります。
  • トランザクションは、FTPや電子メールプロセスなどのデータベース以外のタスクの前に開始され、その後閉じられました。
  • 最初のステートメントがロック句のないSELECTであるトランザクション(「FORUPDATE」など)。このSELECTの結果は、トランザクションの内部でも外部でも同じになるため、トランザクションの開始が早すぎて短縮される可能性があることを示しています。
  • あらゆる種類のステートメントを1つだけ含むトランザクション。
于 2010-07-30T20:32:15.790 に答える
1

pg_cancel_backend() または pg_terminate_backend() をお探しですか?

http://www.postgresql.org/docs/current/static/functions-admin.html を確認してください

于 2010-07-30T20:15:08.507 に答える