当前位置:   article > 正文

KingbaseES 数据库连接断开问题排查思路

kingbase 长时间不操作断开连接

用户在使用数据库过程中,经常会发现如果会话空闲一段时间,会话有可能断开,需要重连。这个问题影响因素很多,包括数据库参数设置、操作系统参数、防火墙等。以下介绍KingbaseES针对该问题的排查思路。

一、数据库参数检查

  1. test=# select name,setting from sys_settings where name='client_idle_timeout';
  2. name | setting
  3. ---------------------+---------
  4. client_idle_timeout | 0

参数 client_idle_timeout 表示允许客户端空闲的时长,在值以内,连接不会断开。如果该值为 0 ,则表示没有连接空闲限制。

二、检查系统防火墙及网络设置

这里包括主机自身的防火墙,以及内网的防火墙,还有交换机的空闲超时时间设置。

确认数据库所在主机的防火墙:

  1. [root@dbhost03 extension]# systemctl status firewalld.service
  2. ● firewalld.service - firewalld - dynamic firewall daemon
  3. Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
  4. Active: inactive (dead)
  5. Docs: man:firewalld(1)

内网防火墙,或交换机的配置需要网络管理员确认。

三、keepalive 参数,避免空闲断开

当建立TCP链接后,如果应用程序或者上层协议一直不发送数据,或者隔很长一段时间才发送数据,当链接很久没有数据报文传输时就需要通过keepalive机制去确定对方是否在线,链接是否需要继续保持。当超过一定时间没有发送数据时,TCP会自动发送一个数据为空的报文给对方,如果对方回应了报文,说明对方在线,链接可以继续保持,如果对方没有报文返回,则在重试一定次数之后认为链接丢失,就不会释放链接。

相关操作系统参数如下:

  1. net.ipv4.tcp_keepalive_time:单位秒,表示发送探测报文之前的链接空闲时间,默认为7200
  2. net.ipv4.tcp_keepalive_intvl:单位秒,表示两次探测报文发送的时间间隔,默认为75
  3. net.ipv4.tcp_keepalive_probes:表示探测的次数

通过keepalive 可以探测客户端进程是否存在,如果客户端进程不存在,服务器端的进程就没必要保持。如果设置更小的 tcp_keepalive_time,就可以更频繁的与客户端通信,避免因为空闲时间过长而被交换机断开。

同样,数据库也有这三个参数:

  1. test=# select name,setting from sys_settings where name like '%keepalive%';
  2. name | setting
  3. -------------------------+---------
  4. tcp_keepalives_count | 0
  5. tcp_keepalives_idle | 0
  6. tcp_keepalives_interval | 0

默认为 0 , 表示参照操作系统设置。如果,不为 0 ,以数据库设置为准。

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号