ITPub博客

首页 > 数据库 > PostgreSQL > postgresql空闲连接以及连接有效性检查的参数小结

postgresql空闲连接以及连接有效性检查的参数小结

原创 PostgreSQL 作者:贺子_DBA时代 时间:2023-01-24 17:53:21 0 删除 编辑

一、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博客 ” ,链接:https://blog.itpub.net/29654823/viewspace-2932962/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
10年数据库管理员从业经历,熟悉Oracle、mysql、tidb、oceanbase、redis、 mongodb 、python等技术栈,持有11g ocm 、mysql 5.7 ocp 、tidb 5.0 ptcp、tidb 6.0 ptca、oceanbase obcp等

注册时间:2014-05-12

  • 博文量
    327
  • 访问量
    2149127