jdbc连接dws时的一些连接参数设置
session连接是通过tcp建立的连接,linunx体现为socket,文件描述符fd等连接会话
一、集群参数
1、session_timeout,服务端“连接”在session_timeout后会主动断开连接,在服务端该session会消失
2、statement_timeout,服务端“sql”在statement_timeout后会通过其他会话发起pg_cancel_backend函数cancel语句,如果语句在事务中,session状态是idle in transaction
二、linux的tcp连接保持
1、可以通过修改/etc/sysctl.conf文件设置,如下是默认值
net.ipv4.tcp_keepalive_time = 7200 ---设置连接上如果没有数据发送的话,多久后发送keepalive探测分组,单位是秒
net.ipv4.tcp_keepalive_probes = 9 ---关闭一个非活跃连接之前的最大重试次数。
net.ipv4.tcp_keepalive_intvl = 75 ---前后两次探测之间的时间间隔,单位是秒
TCP会在空闲了一定时间后发送数据给对方:
1).如果主机可达,对方就会响应ACK应答,就认为是存活的。
2).如果可达,但应用程序退出,对方就发FIN应答,发送TCP撤消连接。
3).如果可达,但应用程序崩溃,对方就发RST消息。
4).如果对方主机不响应ack, rst,继续发送直到超时,就撤消连接。
如此,对端网络断开了,会在约2:11:15后(7200+75*9)发现网络断开,从而关闭连接。
三、已经建立好的socket连接,socket并不会主动探测到网络错误,因此应用也无法主动发现数据库连接断开。
如果没有设置socket timeout的话,应用在数据库返回结果前会无期限地等待,程序也不会报错。通常希望避免出现这种情况,就必须设置socket_timeout暴露网络中断,再在客户端捕获错误处理后继续服务。
四、连接工作时,高级的timeout依赖于低级的timeout,只有当低级的timeout无误时,高级的timeout才能确保正常。
如jdbc连接超时参数生效层级,session_timeout,statement_timeout,socket_timeout,os层(tcp连接),物理连接。
五、连接要保持正常,需要底层网络保持正常,上层网络才能正常工作。
1、如应用层jdbc使用连接池,通过定时发起如'select 1'探活语句,遇到异常通过新建连接处理
2、dws也有cn retry功能重试。
3、os可以在tcp层可以通过tcp_keepalive参数探活。
六、连接断开,有多种形式
服务端断开,客户端断开,中间网络断开。要感知到网络断开只有主动发送消息时才能感知到。这也就理解了为什么服务端和客户端感知网络断开时间点的不同。
- 点赞
- 收藏
- 关注作者
评论(0)