jdbc设置StatementTimeout后还需要设置socket timeout参数吗

背景

我们设置JDBC参数时,不管有没有在Statement中配置超时时间StatementTimeout,我们都需要配置jdbc的socket timeout参数,那么为什么这个socket timeout参数如此必要,不设置又会怎么样?

问题真相

首先设置了StatementTimeout只是表示如果sql的超时时间到了,会通过socket发送Cancel指令给mysql取消超时语句的执行,但是如果此时网络有问题,导致Cancel执行在网络中的某个地方被交换机hold住,那么此时jdbc连接就会进入等待状态,等待的时间由min(socket timeout, keepalive timeout)的最小值决定,下面的图展示了设置socket timeout参数和不设置socket timeout参数时jdbc连接的情况

从图中可知,为了防止出现网络问题时,尽快释放有问题的jdbc连接并重建,我们需要配置socket timeout参数,并且配置值不能太长

相关推荐
wenxin-3 分钟前
NS3网络模拟器中如何利用Gnuplot工具像MATLAB一样绘制各类图形?
开发语言·matlab·画图·ns3·lr-wpan
数据小爬虫@2 小时前
深入解析:使用 Python 爬虫获取苏宁商品详情
开发语言·爬虫·python
健胃消食片片片片2 小时前
Python爬虫技术:高效数据收集与深度挖掘
开发语言·爬虫·python
王老师青少年编程3 小时前
gesp(C++五级)(14)洛谷:B4071:[GESP202412 五级] 武器强化
开发语言·c++·算法·gesp·csp·信奥赛
空の鱼4 小时前
java开发,IDEA转战VSCODE配置(mac)
java·vscode
一只小bit4 小时前
C++之初识模版
开发语言·c++
P7进阶路5 小时前
Tomcat异常日志中文乱码怎么解决
java·tomcat·firefox
王磊鑫5 小时前
C语言小项目——通讯录
c语言·开发语言
钢铁男儿5 小时前
C# 委托和事件(事件)
开发语言·c#
Ai 编码助手5 小时前
在 Go 语言中如何高效地处理集合
开发语言·后端·golang