如何在 Amazon RDS 中关闭与 Postgres 数据库的空闲连接

ddd*_*ddd 5 postgresql amazon-rds spring-boot

我们在 RDS 中设置了一个 Postgres 数据库。我编写了一些 API 来使用 Spring Boot 处理对数据库的数据摄取。最近我发现很多连接在调用 API 后仍然保持会话活动。一些会议可以追溯到 3 个月前。

我想知道是否有办法在一段时间不活动后自动关闭这些连接。从如何自动关闭 PostgreSQL 中的空闲连接?, 看起来我可以设置一个 cron 作业来查找带有 SQL 查询的死连接并用pg_trminate_backend. 这是最好的选择吗?web应用层有什么可以做的吗?或者也许是一些 RDS 参数?在这方面需要一些建议。

Vao*_*sun 6

从 9.6 开始,您有:

https://www.postgresql.org/docs/current/static/runtime-config-client.html

idle_in_transaction_session_timeout (整数)

终止具有空闲时间超过指定持续时间(以毫秒为单位)的打开事务的任何会话。这允许释放该会话持有的任何锁并重用连接槽;它还允许清除仅对该事务可见的元组。有关这方面的更多详细信息,请参阅第 24.1 节。

默认值 0 禁用此功能。

(格式化我的)

在 9.6 之前- 是唯一的原生方式 - 使用SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE now()-state_change > '5 minute'::interval.

此外,如果您将连接池与pgbouncer 一起使用,则:

https://pgbouncer.github.io/config.html

server_idle_timeout如果服务器连接空闲超过这么多秒,它将被丢弃。如果为 0,则禁用超时。[秒]

默认值:600.0

(格式化我的)