MySQL timeout调研与实测

深入理解Mysql 超时配置项 JDBC 是 Java 应用程序中用于访问数据库的一套标准 API类型4驱动是通过socket来处理字节流的。如果socket超时设置不合适,类型4驱动也可能有同样的错误(连接被阻塞)。 阅读详情

说明:

接触网络编程我们不得不提的就是超时,TCP建立连接的超时,数据报文发送/接收超时等等,mysql在超时上也做足了功夫。

Variable_name Default Value
connect_timeout 5
interactive_timeout 28800
net_read_timeout 30
net_write_timeout 60
wait_timeout 28800

上面这5个超时是本次调研的重点,当然MySQL绝对不指这5种超时的配置,由于经历和时间有限,本次只谈这5种。

一、 connect_timeout

这个比较好理解,字面上看意思是连接超时。”The number of seconds that the mysqld server waits for a connect packet before responding with Bad handshake”。 MySQL连接一次连接需求经过6次“握手”方可成功,任意一次“握手”失败都有可能导致连接失败,如下图所示。

前三次握手可以简单理解为TCP建立连接所必须的三次握手,MySQL无法控制,更多的受制于不TCP协议的不同实现,后面的三次握手过程超时与connect_timeout有关。简单的测试方法:

$time telnet mysql_ip_addr port
$ time telnet 127.0.0.1 5051
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
?
Connection closed by foreign
host.
real    0m5.005s #这里的5秒即mysql默认的连接超时
user    0m0.000s
sys     0m0.000s

Telnet未退出前通过show processlist查看各线程状态可见,当前该连接处于授权认证阶段,此时的用户为“unauthenticated user”。细心的你懂得,千万不要干坏事。

+--+--------------------+---------------+----+-------+----+----------------+----------------+
|Id|User                |Host           |db  |Command|Time|State           |Info            |
+--+--------------------+---------------+----+-------+----+----------------+----------------+
| 6|root                |localhost      |NULL|Query  |   0|NULL            |show processlist|
| 7|unauthenticated user|localhost:58598|NULL|Connect|NULL|Reading from net|NULL            |
+--+--------------------+---------------+----+-------+----+----------------+----------------+

二、 wait_timeout

等待超时,那mysql等什么呢?确切的说是mysql在等用户的请求(query),如果发现一个线程已经sleep的时间超过wait_timeout了那么这个线程将被清理掉,无论是交换模式或者是非交换模式都以此值为准。

注意:wait_timeout是session级别的变量哦,至于session和global变量的区别是什么我不说您也知道。手册上不是明明说wait_timeout为not interactive模式下的超时么?为什么你说无论是交换模式或者非交换模式都以此值为准呢?简单的测试例子如下:

mysql> show variables like "%timeout%";
+----------------------------+-------+
| Variable_name              | Value |
+----------------------------+-------+
| connect_timeout            | 5     | 
| delayed_insert_timeout     | 300   | 
| innodb_lock_wait_timeout   | 50    | 
| innodb_rollback_on_timeout | OFF   | 
| interactive_timeout        | 28800 | 
| net_read_timeout           | 30    | 
| net_write_timeout          | 60    | 
| slave_net_timeout          | 3600  | 
| table_lock_wait_timeout    | 50    | 
| wait_timeout               | 28800 | 
+----------------------------+-------+
10 rows in set (0.00 sec)
 
Date : 2012-2-24 Fri 22:41:24
#可见我把interactive_timeout改为1秒后经过了4秒的时间没有任何请求,连接却没有被断开。为了验证wait_timeout我再把interactive_timeout改回来
mysql> set interactive_timeout=28800;
Query OK, 0 rows affected (0.00 sec)
Date : 2012-2-24 Fri 22:43:43

mysql> show variables like "%timeout%";
+----------------------------+-------+
| Variable_name              | Value |
+----------------------------+-------+
| connect_timeout            | 5     | 
| delayed_insert_timeout     | 300   | 
| innodb_lock_wait_timeout   | 50    | 
| innodb_rollback_on_timeout | OFF   | 
| interactive_timeout        | 28800 | 
| net_read_timeout           | 30    | 
| net_write_timeout          | 60    | 
| slave_net_timeout          | 3600  | 
| table_lock_wait_timeout    | 50    | 
| wait_timeout               | 28800 | 
+----------------------------+-------+
10 rows in set (0.00 sec)
Date : 2012-2-24 Fri 22:43:46
 
mysql> set wait_timeout=1;
Query OK, 0 rows affected (0.00 sec)
 
Date : 2012-2-24 Fri 22:43:52
 
mysql> set wait_timeout=1;
ERROR 2006 (HY000): MySQL server has gone away  
No connection. Trying to reconnect...
Connection id:    8
Current database: *** NONE ***
 
Query OK, 0 rows affected (0.00 sec)
 
Date : 2012-2-24 Fri 22:43:55 #可见即使在交互模式下真正起作用的也是wait_timeout而不是interactive_timeout

那为什么手册上说在交互模式下使用的是interactive_timeout呢,原因如下:

check_connection函数在建立连接初期,如果为交互模式则将interactive_timeout值赋给wait_timeout,骗您误以为交互模式下等待超时为interactive_timeout 代码如下:

if (thd->client_capabilities & CLIENT_INTERACTIVE)
     thd->variables.net_wait_timeout=thd->variables.net_interactive_timeout;

三、 interactive_timeout

参数含义:服务器关闭交互式连接前等待活动的秒数。交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE选项的客户端。

参数默认值:28800秒(8小时)

四、 net_write_timeoutite_timeout

看到这儿如果您看累了,那下面您得提提神了,接下来的两个参数才是我们遇到的最大的难题。 “The number of seconds to wait for a block to be written to a connection before aborting the write.” 等待将一个block发送给客户端的超时,一般在网络条件比较差的时,或者客户端处理每个block耗时比较长时,由于net_write_timeout导致的连接中断很容易发生。下面是一个模拟的例子:

mysql > set global max_allow_packet=1;
#目的是让结果集被分成多个包传输给客户端 
mysql > set global net_write_timeout=1; 
#include 
#include 
#include 
main() {
   MYSQL *conn;
   MYSQL_RES *res;
   MYSQL_ROW row;
   char *server = "localhost";
   char *user = "test"; 
   char *password = ""; /* set me first */
   char *database = "test";
   conn = mysql_init(NULL);
   /* Connect to database */
   if (!mysql_real_connect(conn, server, 
         user, password, database, 0, NULL, 0)) {
      fprintf(stderr, "%s\n", mysql_error(conn));
      exit(1);
   }
   /* send SQL query */
   if (mysql_query(conn, "SELECT * from big_table;")) {
      fprintf(stderr, "%s\n", mysql_error(conn));
      exit(1);
   }
   res = mysql_use_result(conn);
#mysql_use_result不会一次将全部结果给都丢给客户端内存
   /* output table name */
   printf("MySQL Tables in mysql database:\n");
   sleep(7); #模拟网络环境不稳定或客户端处理耗时
   while ((row = mysql_fetch_row(res)) != NULL){
      printf("%s \n", row[0]);
   }
   /* close connection */
   mysql_free_result(res);
   mysql_close(conn);
}

四、 net_read_timeout

“The number of seconds to wait fprintfor more data from a connection before aborting the read.”。Mysql读数据的时的等待超时,可能的原因可能为网络异常或客户端or服务器端忙无法及时发送或接收处理包。这里我用的是iptables来模拟网络异常,生成一个较大的数据以便于给我充足的时间在load data的过程中去配置iptables规则。

mysql > set global max_allowed_packet=1073741824;
mysql > set global net_read_timeout=1;
mysql > create table test.test(a char(10)) engine=myisam;
for((i=0;i<100000;i++));do echo "abcdefghij" >> data.txt;done

mysql -uroot -h 127.0.0.1 -P 3306 --local-enable=1
--max-allowed-packet=1073741824
mysql > load data local infile 'load.txt' into table test;
 
iptables -F
/sbin/iptables -A INPUT -p tcp --dport 3306 -j DROP
/sbin/iptables -A OUTPUT -p tcp --sport 3306 -j DROP
iptables -L

执行完iptables命令后show processlist可以看到load data的连接已经被中断掉了,但因为这里我选择了myisam表,所以select count(*) from test;可以看到数据还是被插入了一部分。

五、 net_retry_count

“超时”的孪生兄弟“重试”,时间原因这个我没有进行实际的测试,手册如是说,估且先信它一回。

If a read or write on a communication port is interrupted, retry this many times before giving up. This value should be set quite high on FreeBSD because internal interrupts are sent to all threads. On Linux, the “NO_ALARM” build flag (-DNO_ALARM) modifies how the binary treats both net_read_timeout and net_write_timeout. With this flag enabled, neither timer cancels the current statement until after the failing connection has been waited on an additional net_retry_count times. This means that the effective timeout value becomes” (timeout setting) × (net_retry_count+1)”.

FreeBSD中有效,Linux中只有在build的时候指定NO_ALARM参数时net_retry_count才会起作用。 说明:目前线上使用的版本都未指定NO_ALARM。

参考链接:

MySQL中的配置参数interactive_timeout和wait_timeout(可能导致过多sleep进程的两个参数)

官方文档关于interactive_timeout的解释

GLM-4.6与Claude 4.5企业级工作流实测对比 大语言模型在真实办公场景中的效能,远不止于通用基准测试(如MMLU、GSM8K)的分数高低,而取决于其对长文档理解、多源异构数据整合、领域术语锚定及隐含逻辑推理等核心能力的综合表现。本文聚焦合同比对、用户访谈归纳、代码漏洞定位、跨材料决策摘要四类高频企业工作流,深入剖析GLM-4.6与Claude 4.5在中文语境下的原生能力差异——尤其关注术语一致性、证据链构建、结构感知鲁棒性及否定式需求建模等关键维度。结果表明:模型选型不应依赖参数规模或单项指标,而需匹配具体业务的认知负荷特征与输入噪声水平。适合技术负 阅读详情

相关推荐

Java+SpringBoot高考志愿填报智能辅助系统设计与实现

高考志愿填报是考生和家长在短时间内面临的海量信息筛选与决策难题。如何用技术手段将零散的院校数据、专业组信息、历年录取位次高效整合,并转换为可理解的推荐结果,是这类业务系统的核心价值所在。SpringBoot作为Java生态中主流的微服务开发框架,提供了快速构建数据接口、整合缓存与限流组件的能力。结合基于位次法和线差法的加权评分算法,系统能够为考生提供“冲稳保”三档志愿推荐,并通过缓存预热、Sentinel限流与降级策略应对出分日的流量高峰。从数据表结构设计、同位分换算、推荐引擎实现到Docker部署,这套方

weixin_34293059的博客 429

mysql里几个超时配置参数wait_timeout,net_read_timeout等

mysql

一名数据库爱好者的专栏 5473

【UE4】PMC程序化生成戈德堡多面体详解(六边形星球)

游戏实机录屏 【魔方超新星】30天独立开发PCG Minigame《盖亚计划》作品展示,尚有不足,大佬轻喷 目录 游戏实机录屏 一、简介 二、设计思路 2.1 Disco Ball 2.2 Fibonacci Sphere 2.3 Goldberg Polyhedron 2.3.1 细分+对偶(最终方案) 2.3.2 对偶+截角(更优) 三、参考文献 一、简介 在制作Minigame初期,游戏风格想模仿《文明6》与《Polygonal Planet Proje...

ColorGalaxy 5928

net_read_timeout 和net_write_timeout

解决 net_write_timeout 写入超时

sungencheng的博客 8121

win10和Mac上安装Freesurfer

Mac安装Freesurfer 软件下载地址 可以根据官方给出的demo视频一步一步下载

Daily_365的博客 6075

海洋与地质地理信息数据下载网站汇总集锦

各种海洋与地质地理信息数据集合

qq_36980284的博客 1268

深入理解MySQL的超时配置项是什么

JDBC 是 Java 应用程序中用于访问数据库的一套标准 API类型4驱动是通过socket来处理字节流的。如果socket超时设置不合适,类型4驱动也可能有同样的错误(连接被阻塞)。

Java_LingFeng的博客 2536

Matcap与菲涅尔

菲尼尔效果(简化版公式):fresnel = base + scale*((1-v*n)^power)透明队列为后前渲染,不关闭深度写入则会覆盖之前的像素,导致混合不了。y的值为0~1,根据x3返回对应y值。两色混合做个demo看看!混合为什么要关闭深度写入?

weixin_62773441的博客 371

JDBC--06--报错net_write_timeout---MySQL JDBC StreamResult通信原理

1

时光里的博客 3290

【AI大模型应用开发】3.2 RAG实战 - RAG应用+UI实现加载本地文件并对话

前面我们实现了RAG基本流程,今天我们在此基础上给它加个UI界面,在浏览器打开,实现上传本地文件、解析,并用大模型实现与该文档的对话。也就是一个阉割版demo版的ChatPDF或知识库对话系统。

同学小张的博客 3053

FM收音机调试-RDA5807M

收音机调试 IC型号:RDA5807M

mangofu的博客 6163

mysql timeout调研与实测

mysql的timeout有多少种,之间的区别时什么?本文从实测和代码分析的角度验证了不同的超时参数的作用。接触网络编程我们不得不提的就是超时,TCP建立连接的超时,数据报文发送/接收超时等等,mysql在超时上也做足了功夫。123456Variable_name Default Valueconnect_timeout 5interactive_timeout 28800net_read_tim...

dz45693的专栏 1941

【WRF安装】WRF环境配置移植详细说明

【WRF安装】WRF环境配置移植详细说明

WW、forever的博客 819

mysql timeout java_MySQL timeout调研与实测

说明:接触网络编程我们不得不提的就是超时,TCP建立连接的超时,数据报文发送/接收超时等等,mysql在超时上也做足了功夫。Variable_name Default Valueconnect_timeout 5interactive_timeout 28800net_read_timeout 30net_write_timeout 60wait_timeout 28800上面这5个超时是本次调研...

weixin_30069113的博客 388

【UML】第12篇 序列图(1/2)——基本概念和构成

序列图(Sequence Diagram)是一种用于显示对象之间交互的图形化表示。它描述了在特定场景下,对象之间按照时间顺序进行的消息传递和协作过程。在序列图中,对象被表示为带有垂直虚线的矩形,虚线表示对象的生命周期。对象之间的交互通过箭头表示的消息来表示,箭头从一个对象的生命线指向另一个对象的生命线,表示消息的发送和接收。

AI人人懂 3045

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

mysql l执行频率_mysql timeout调研与实测

mysql的timeout有多少种,之间的区别时什么?本文从实测和代码分析的角度验证了不同的超时参数的作用。接触网络编程我们不得不提的就是超时,TCP建立连接的超时,数据报文发送/接收超时等等,mysql在超时上也做足了功夫。Variable_name Default Valueconnect_timeout 5interactive_timeout 28800net_read_timeout 3...

weixin_28839549的博客 253

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

mysql timeout参数详解2

mysql的timeout有多少种,之间的区别时什么?本文从实测和代码分析的角度验证了不同的超时参数的作用。 接触网络编程我们不得不提的就是超时,TCP建立连接的超时,数据报文发送/接收超时等等,mysql在超时上也做足了功夫。 Variable_name Default Value connect_timeout 5 interactive_timeout 28800 net_re

george_auyeung的博客 1211

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

connect_timeout interactive_timeout net_read_timeout net_write_timeout wait_timeout

mysql的timeout有多少种,之间的区别时什么?本文从实测和代码分析的角度验证了不同的超时参数的作用。 接触网络编程我们不得不提的就是超时,TCP建立连接的超时,数据报文发送/接收超时等等,mysql在超时上也做足了功夫。 123456Variable_name Default Valueconnect_timeout 5interactive_timeout 28800ne

kf_panda 3394

Mysql超时

参考文章:https://www.phpsong.com/1074.htmlhttp://www.ttlsa.com/mysql/research-and-measurement-of-timeout-mysql/https://blog.youkuaiyun.com/gladmustang/article/details/41407851mysql有好几种timeout的情况,我们先用sql来查一下time...

dongdong2980的博客 1643

SpringBoot文旅平台架构设计与高并发优化实践

现代文旅平台开发需要应对高并发访问、多媒体内容加载和多端数据一致性等核心挑战。SpringBoot框架凭借其自动配置机制和嵌入式Tomcat,成为构建稳定后端服务的优选方案。在技术实现层面,采用JPA处理实体关联关系能有效优化标准CRUD操作,而Elasticsearch提供高效的全文检索能力。针对节假日流量高峰,四级缓存策略(浏览器本地缓存、Nginx静态资源缓存、Redis热点数据缓存和MySQL查询缓存)可显著提升系统性能,实测QPS从1200提升至8600。这类技术方案特别适用于需要展示文化地图、V

weixin_34414650的博客 443

基于SpringBoot的宿舍管理系统设计与优化实践

宿舍管理系统是高校信息化建设中的关键应用,采用B/S架构实现学生住宿、资产、费用的数字化管理。SpringBoot框架凭借其快速启动、自动配置和丰富生态成为首选,结合MySQL主从分离、Redis缓存等中间件构建高可用架构。系统采用RBAC模型实现动态权限控制,通过多级缓存和SQL优化应对访问高峰,并利用Kubernetes实现弹性扩展。典型应用场景包括水电费阶梯计算、微信支付回调处理等,为高校后勤管理提供全流程解决方案。

weixin_30430169的博客 296

SpringBoot美容院管理系统开发实战与优化

SpringBoot作为现代化Java开发框架,通过自动配置和起步依赖大幅提升开发效率,特别适合快速构建企业级应用。其内嵌服务器特性简化部署流程,与JPA等持久层技术结合可实现高效数据管理。在服务业数字化场景中,管理系统需要处理预约冲突检测、会员成长体系、库存并发控制等典型业务问题。本文以美容行业为例,详解如何利用SpringBoot构建智能管理系统,包含四叉树时间检测算法、策略模式实现会员规则等实战方案,并分享Redis原子操作解决库存超卖、Quartz任务调度优化等典型问题处理经验。

weixin_34204722的博客 605
上一篇: 一次JDBC连接泄露问题的排查过程总结
下一篇: etcd、Zookeeper和Consul一致键值数据存储的性能对比
Viking_bird
博客等级 码龄11年 92粉丝 183原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值