jdbc连接dws时的一些连接参数设置

举报
dgt 发表于 2024/06/26 16:29:38 2024/06/26
【摘要】 session_timeout,socket_timeout,statement_timeout,tcp_keepalive,

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参数探活。
六、连接断开,有多种形式
服务端断开,客户端断开,中间网络断开。要感知到网络断开只有主动发送消息时才能感知到。这也就理解了为什么服务端和客户端感知网络断开时间点的不同。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。