一、idle_session_timeout参数
用来控制空闲会话连接超时的时间。区别于tcp_keepalives相关参数,
当一个会话连接长时间没有执行SQL或者活动时,会将该会话释放,可以释放缓存避免出现例如OOM等问题
idle_session_timeout:默认值为0,表示禁用,其单位是毫秒;
14版本引入了idle_session_timeout参数,可以在设置该参数,超过设置的时间,数据库会关闭空闲连接。之前的老版本可以使用pg_timeout插件,达到同样的效果。但是同样也会关闭掉我们想保留的正常的空闲连接,所以设置TCP keepalive是更好的解决方案。
二、postgresql的tcp_keepalives相关参数设置可以及时发现无效连接,
如下这样可以在5分钟以内就探测出无效连接
tcp_keepalives_idle = 60 # TCP_KEEPIDLE, in seconds;
tcp_keepalives_interval = 20 # TCP_KEEPINTVL, in seconds;
tcp_keepalives_count = 10 # TCP_KEEPCNT;
三、PG14版本还引入了client_connection_check_interval参数,
每隔一段时间检测client是否离线(断开),如果已经离线,则快速结束掉正在运行的query,,浪费数据库资源。默认是0,单位默认毫秒
官方文档解释:
client_connection_check_interval = 0 # time between checks for client # disconnection while running queries; 0 for never
四、总结:
1) idle_session_timeout参数类似于mysql 的wait_timeout参数,数据库连接空闲时间超过这个参数值,就被数据库给断开!包括实效连接和正常空闲连接!
2)postgresql的tcp_keepalives相关参数设置可以及时发现无效连接,但不会断开空闲时间太长的连接,
3)client_connection_check_interval参数可以防止某个连接已经失效了,但是还在执行查询返回给客户端!定期检查数据库连接的可用性,类似于tcp_keepalives相关参数!
五、关于pg数据库参数修改是否需要重启的判断;
查看pg数据库配置参数的基本信息!可以通过context字段值来了解修改该参数是否需要重启数据库!
postgres=# select * from pg_settings;
其中context字段值分为:internal、postmaster、sighup等等具体如下图片所示
查看tcp_keepalives相关参数,都是user,说明可以直接通过set来修改自己连接的tcp_keepalives设置!
postgres=# select name ,context from pg_settings where name like 'tcp_keepalives%';
name | context
-------------------------+---------
tcp_keepalives_count | user
tcp_keepalives_idle | user
tcp_keepalives_interval | user
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29654823/viewspace-2932962/,如需转载,请注明出处,否则将追究法律责任。
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员