sql >> データベース >  >> RDS >> PostgreSQL

アイドル状態のPostgreSQL接続のタイムアウトはありますか?

    接続リークがあるようです プールされた接続を閉じることができないため、アプリケーションで 。 <idle> in transactionだけで問題が発生しているわけではありません セッションですが、全体的に接続が多すぎます。

    接続を切断することはそのための正しい答えではありませんが、それはOKっぽい一時的な回避策です。

    PostgreSQLを再起動してPostgreSQLデータベースから他のすべての接続を起動するのではなく、「postgresデータベースから他のすべてのユーザーを切り離すにはどうすればよいですか?」を参照してください。 PostgreSQLデータベースへのアクティブな接続がある場合にPostgreSQLデータベースを削除するにはどうすればよいですか? 。後者はより良いクエリを示しています。

    タイムアウトの設定については、@ Doonが提案したように、PostgreSQLでアイドル状態の接続を自動的に閉じる方法を参照してください。これは、PgBouncerを使用してPostgreSQLのプロキシを作成し、アイドル状態の接続を管理することをお勧めします。とにかく接続をリークするバグのあるアプリケーションがある場合、これは非常に良い考えです。私は非常に強く PgBouncerの構成をお勧めします。

    TCPキープアライブは、アプリがまだ接続されて生きているため、ここでは機能しません。

    PostgreSQL 9.2以降では、新しいstate_changeを使用できます。 タイムスタンプ列とstate pg_stat_activityのフィールド アイドル接続リーパーを実装します。 cronジョブに次のようなものを実行させます:

    SELECT pg_terminate_backend(pid)
        FROM pg_stat_activity
        WHERE datname = 'regress'
          AND pid <> pg_backend_pid()
          AND state = 'idle'
          AND state_change < current_timestamp - INTERVAL '5' MINUTE;
    

    古いバージョンでは、接続がアイドル状態になったときを追跡する複雑なスキームを実装する必要があります。邪魔しないで; pgbouncerを使用するだけです。



    1. JavaとPostgresの列挙型を連携させて更新するにはどうすればよいですか?

    2. SQLiteで数値にパーセント記号を追加する2つの方法

    3. postgresqlinformation_schemaのすべてのテーブルを一覧表示します

    4. SQLServerテーブル列の文字列を置き換える方法