MySQL - wait_timeout与interactive_timeout详解

【1】分别是什么

① interactive_timeout

官网说明如下:MySQL官网地址

MySQL服务器关闭交互式连接前等待的秒数。交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE选项的客户端。参数默认值:28800秒(8小时)

② wait_timeout

MySQL服务器关闭非交互连接之前等待的秒数。在会话启动时,根据全局wait_timeout值或全局interactive_timeout值初始化会话wait_timeout值,取决于客户端类型–由mysql_real_connect()的连接选项CLIENT_INTERACTIVE定义。参数默认值:28800秒(8小时)。

什么是交互连接,什么是非交互连接?

通过MySQL 客户端连接数据库的是交互会话,通过jdbc等程序连接数据库的是非交互会话。

【2】继承关系

① 单独修改全局interactive_timeout

set GLOBAL interactive_timeout=1000;
1
分别查看全局、会话变量值:

show GLOBAL VARIABLES like ‘%timeout%‘;
show VARIABLES like ‘%timeout%‘;
1
2

分析如下:

在交互模式下,session和global级别的 interactive_timeout 继承了 interactive_timeout global的值。而 wait_timeout 的值,session级别继承了interactive_timeout。global级别的wait_timeout 则不受影响 。

② 设置session级别的interactive_timeout

set interactive_timeout = 1100;
1

分析如下:

无论全局还是会话级别的wait_timeout值并不受session级别的interactive_timeout的值的影响。

③ 同时设置全局值,且不同

set GLOBAL interactive_timeout = 1300;
set GLOBAL wait_timeout = 1400;
1
2
查看全局变量值:

show GLOBAL VARIABLES like ‘%timeout%‘;
1

查看会话变量值:

show VARIABLES like ‘%timeout%‘;
1

分析如下:

session级别的wait_timeout 继承global 级别的 interactive_timeout 的值。 global级别的wait_timeout 则不受影响。在没有改变 interactive_timeout的值的情况下,去修改wait_timeout的值, 结果无效。

如上是交互式连接测试下结果:交互式连接的wait_timeout 继承于global的interactive_timeout。

而非交互是连接结果如下:非交互式连接的wait_timeout继承于global的wait_timeout。

【3】项目异常与值设置

项目使用程序连接数据库,那么就属于非交互连接了,就需要着重考虑如何设置wait_timeout值。

常见问题如下:

① The last packet successfully received from the server was 23,579 milliseconds ago. The last packet sent successfully to the server was 0 milliseconds ago.
Caused by: java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost.

② MySQL server has gone away

值设置

wait_timeout默认值为28800,大小需要根据项目来定。
wait_timeout过大有弊端,其体现就是MySQL里大量的SLEEP进程无法及时释放。
过小容易遇到MySQL server has gone away ,死锁等待等问题。

【4】总结

控制连接最大空闲时长的wait_timeout参数。
对于非交互式连接,类似于jdbc连接,wait_timeout的值继承自服务器端全局变量wait_timeout。
对于交互式连接,类似于mysql客户单连接,wait_timeout的值继承自服务器端全局变量interactive_timeout。
判断一个连接的空闲时间,可通过show processlist输出中Sleep状态的时间。
超时时间只对非活动状态的connection进行计算。
超时时间只以session级别的wait_timeout 为超时依据,global级别只决定session初始化时的超时默认值。
【Tips】: 参考文档

MySQL timeout相关参数解析和测试

MySQL中wait_timeout与interactive_timeout区别

MySQL官网API
————————————————
版权声明:本文为CSDN博主「流烟默」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接: https://blog.csdn.net/j080624/article/details/80585195

原文地址:https://www.cnblogs.com/railgunman/p/12121602.html

时间: 2024-10-22 09:27:35

MySQL - wait_timeout与interactive_timeout详解的相关文章

mysql改删数据详解

修改表数据 先给class表增加几行数据以便操作 mysql> insert into class mysql> (sname,gender,company,fanbu) mysql> values mysql> ('xiaoxiao','男','腾讯',200), mysql> ('xiaoqing','女','百度',300); mysql> select * from class; 修改数据 将xiaoxiao的fanbu数据增加200 mysql> upd

mysql explain执行计划详解

1).id列SELECT识别符.这是SELECT查询序列号.这个不重要,查询序号即为sql语句执行的顺序 2).select_type列常见的有: A:simple:表示不需要union操作或者不包含子查询的简单select查询.有连接查询时,外层的查询为simple,且只有一个 B:primary:一个需要union操作或者含有子查询的select,位于最外层的单位查询的select_type即为primary.且只有一个 C:union:union连接的两个select查询,第一个查询是de

MySQL 执行计划explain详解

MySQL 执行计划explain详解 2015-08-10 13:56:27 分类: MySQL explain命令是查看查询优化器如何决定执行查询的主要方法.这个功能有局限性,并不总会说出真相,但它的输出是可以获取的最好信息,值得花时间去了解,因为可以学习到查询是如何执行的. 调用EXPLAIN 在select之前添加explain,mysql会在查询上设置一个标记,当执行查询计划时,这个标记会使其返回关于执行计划中每一步的信息,而不是执行它.它会返回一行或多行信息,显示出执行计划中的每一部

PHP mysql与mysqli事务详解

官方对PHP连接到MySQL数据库服务器的三种主要的API简介如下: http://php.net/manual/zh/mysqli.overview.php PHP mysql与mysqli事务详解 在PHP中,mysqli 已经很好的封装了mysql事务的相关操作.如下示例: $sql1 = "update User set ScoreCount = ScoreCount +10 where ID= '123456'"; $sql2 = "update ScoreDeta

MySQL中EXPLAIN命令详解

explain显示了mysql如何使用索引来处理select语句以及连接表.可以帮助选择更好的索引和写出更优化的查询语句. 使用方法,在select语句前加上explain就可以了: 如: explain select surname,first_name form a,b where a.id=b.id EXPLAIN列的解释: table:显示这一行的数据是关于哪张表的 type:这是重要的列,显示连接使用了何种类型.从最好到最差的连接类型为const.eq_reg.ref.range.in

MySQL UUID函数的详解(转)

MySQL UUID函数的详解 MySQL中可以有二类用于生成唯一值性质的工具:UUID()函数和自增序列,那么二者有何区别呢?我们就此对比下各自的特性及异同点: l  都可以实现生成唯一值的功能: l  UUID是可以生成时间.空间上都独一无二的值:自增序列只能生成基于表内的唯 一值,且需要搭配使其为唯一的主键或唯一索引: l  实现方式不一样,UUID是随机+规则组合而成的,而自增序列是控制一个值逐步增长的: l  UUID产生的是字符串类型值,固定长度为:36个字符,而自增序列产生的是整数

Navicat for MySQL 选项设置技巧详解

Navicat for MySQL给用户提供了完整的用户自定义设置界面选项,从主菜单选择工具->选项,但是很多的用户第一次接触,对这方面如何设置不是很了解,本教程将详细的给大家介绍介绍Navicat for MySQL 选项设置技巧详解.希望可以帮到大家. Navicat for MySQL 常规选项 Navicat 常规选项主要包括以下内容: 窗口在工作列显示:每打开一个新窗口时会自动显示在 Windows 任务栏.停用该选项后,当退出 Navicat 主窗口时,所有窗口(例如:表.查询)将会

Mysql配置文件my.ini详解

原链接:http://blog.sina.com.cn/s/blog_718ac8bf0100pkvp.html 以下是Mysql数据库服务器配置文件my.ini的详细配置.应用场合是InnoDB引擎,2核CPU, 32位SUSE. [client] #password = your_password port  = 3306 socket  = /tmp/mysql.sock # Here follows entries for some specific programs # The MyS

【转】Python中操作mysql的pymysql模块详解

Python中操作mysql的pymysql模块详解 前言 pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而后者不支持3.x版本. 本文测试python版本:2.7.11.mysql版本:5.6.24 一.安装 1 pip3 install pymysql 二.使用操作 1.执行SQL 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25