You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

PostgreSQL空闲连接自动关闭配置未生效问题求助

PostgreSQL空闲连接自动关闭配置未生效问题求助

嘿,我发现你遇到了PostgreSQL里空闲连接没法自动关闭的困扰,你设置了idle_in_transaction_session_timeout = 300000但没看到效果对吧?其实这里有个很关键的细节你可能没注意到:

  • 你配置的idle_in_transaction_session_timeout参数,只针对处于事务中但闲置的连接(也就是pg_stat_activitystate字段为idle in transaction的会话),这类连接是已经开启了事务却长时间没执行任何操作的。
  • 而你现在看到的那些普通的idle状态连接(没有开启事务的空闲会话),需要用另一个参数来管控——idle_session_timeout

解决步骤很简单:

  1. 打开你的postgresql.conf配置文件,添加或者修改这个参数:
    idle_session_timeout = 300000  # 单位是毫秒,300000就是5分钟
    
  2. 重载PostgreSQL配置(不需要重启服务,执行这个SQL就行):
    SELECT pg_reload_conf();
    

另外,你可以先执行这个查询,确认一下当前数据库里的连接状态分布,看看是哪种空闲连接占比高:

SELECT state, count(*) 
FROM pg_stat_activity 
WHERE datname = 'db_name' 
GROUP BY state;

还有个小提醒:如果你的应用用了连接池(比如PgBouncer、HikariCP这类),那连接池本身可能会维持一定数量的空闲连接,这时候光靠数据库的参数可能没法完全关闭这些连接,你还需要去调整连接池的空闲超时配置哦。

备注:内容来源于stack exchange,提问作者Faheem Sultan

火山引擎 最新活动