如何关闭 Postgres 中的非活动连接

How to close inactive connections in Postgres

Postgres 9.1 服务器在 Debian 下 运行。 它由使用 ngpsql、Apache 和 mod_mono 的 Mono MVC4 Web 应用程序访问。 pg_dump 每晚也在同一台计算机上从互联网的 5432 端口访问它。 连接已于 6 月 20 日清除。 pgAdmin statuc window 显示从今天开始有很多空闲连接。 (见下图)。

一段时间后,连接数达到 100,服务器停止接受连接。需要在 pgAdmin 中手动终止连接。只有在该服务器再次开始接受连接之后。

有趣的是,其中一些连接的开始时间与图像中显示的完全相同。 如何解决或诊断问题? 我试过了 /etc/init.d/apache2 restart 。这关闭了 6 月 25 日和 27 日的连接,但 6 月 20 日的连接仍然打开。

如何自动关闭空闲连接或查找打开连接的原因?也许有一些 postgres 或 Debian 设置会自动关闭空闲连接?

使用

"PostgreSQL 9.1.2 on x86_64-unknown-linux-gnu, compiled by gcc-4.4.real (Debian 4.4.5-8) 4.4.5, 64-bit"

更新

应用程序使用以下连接字符串:

    NpgsqlConnectionStringBuilder csb = new NpgsqlConnectionStringBuilder()
    {
        SearchPath = schema == null ? "public" : schema + ",public",
        Timeout = 115,
        CommandTimeout = 115,
        Host = Config.Server,
        Database = Config.DefaultDataBase,
        UserName = Config.ServerUser,
        Port = Config.Port,
        // Apache allows 150 connections, MaxPoolSize is set accordingly:
        MaxPoolSize = 155
    };

看看这个 post Is there a timeout for idle PostgreSQL connections?

并考虑在您的数据库前使用 pgbouncer。