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参数,并且配置值不能太长

相关推荐
zyx没烦恼几秒前
Linux 多线程
linux·运维·服务器·开发语言·c++
布道谷2 分钟前
锁的可重入性:概念、原理与Java实现深度解析
java·后端
似水এ᭄往昔2 分钟前
【C语言】预处理(预编译)(C语言完结篇)
c语言·开发语言
雷渊5 分钟前
谈一谈在分布式系统中,如何保证数据一致性?
java·后端·面试
省长9 分钟前
使用 Sa-Token CORS 策略处理跨域问题(三种方式全版)
java·后端·开源
愚润求学12 分钟前
【C++】模板进阶
c语言·开发语言·c++·笔记·模板
天若有情67316 分钟前
【Python】什么是列表推导式?
开发语言·python
xyd陈宇阳27 分钟前
C++ 入门三:函数与模板
开发语言·c++
星之卡比*27 分钟前
前端知识点---闭包(javascript)
开发语言·前端·javascript
东方芷兰36 分钟前
JavaWeb 课堂笔记 —— 03 Vue
java·前端·javascript·vue.js·笔记