wait_timeout and interactive_timeout 参数
wait_timeout and interactive_timeout 参数
- 非交互模式连接:通常情况下,应用到RDS实例会采用非交互模式,具体采用哪个模式需要查看应用的连接方式配置,比如PHP通过传递MYSQL_CLIENT_INTERACTIVE常量给mysql_connect()函数即可开启连接的交互模式。wait_timeout参数控制非交互模式连接的超时时间(单位秒,默认值为24小时即86400秒),当非交互式连接空闲时间超过wait_timeout指定的时间后,RDS实例会主动关闭连接。
- 对于交互模式连接:通过 mysql 客户端 与 mysql server 建立的连接是交互式连接,interactive_timeout参数控制交互模式连接的超时时间(单位秒,默认值为2小时即7200秒),当交互式连接空闲时间超过interactive_timeout指定的时间后,RDS实例会主动关闭连接。
- wait_timeout和interactive_timeout这两个参数的修改,修改前已经存在的会话保持修改前的设置,修改后新创建的会话使用新的参数设置。
wait_timeout指的是“连接完成后,使用过程中”的等待时间
| 参数 | 作用 |
|---|---|
| wait_timeout | 非交互式连接建立完成后,使用过程中的等待时间(单位:秒) |
| interactive_timeout | 交互式连接建立完成后,使用过程中的等待时间(单位:秒) |
MySQL 8.0.26
| client A | client B | client C | |
|---|---|---|---|
| T1 | mysql -h -P -u -p set global wait_timeout = 10; set global interactive_timeout = 20; select @@global.wait_timeout, @@global.interactive_timeout; result (10, 20) |
||
| T2 | mysql -h -P -u -p select @@session.wait_timeout, @@session.interactive_timeout; result (20, 20) |
db = pymysql.connect() cursor = db.cursor() cursor.execute("select @@session.wait_timeout, @@session.interactive_timeout;") result (10,20 ) |
|
| T3 | set @@session.wait_timeout = 10; select @@session.wait_timeout, @@session.interactive_timeout; result (10, 20) |
||
| T4 | wait 15s | time.sleep(15) | |
| T5 | select @@session.wait_timeout, @@session.interactive_timeout; (ERROR 4031 (HY000): The client was disconnected by the server because of inactivity. See wait_timeout and interactive_timeout for configuring this behavior.) result(20,20) |
cursor.execute("select @@session.wait_timeout, @@session.interactive_timeout;") pymysql.err.OperationalError: (2013, 'Lost connection to MySQL server during query') |
|
| T6 | set @@session.wait_timeout = 20; set @@session.interactive_timeout = 10; select @@session.wait_timeout, @@session.interactive_timeout; result (20, 10) |
cursor.execute("set @@session.wait_timeout = 20;") cursor.execute("set @@session.interactive_timeout = 10;") �cursor.execute("select @@session.wait_timeout, @@session.interactive_timeout;") result(20, 10) |
|
| T7 | wait 15s | time.sleep(15) | |
| T8 | select @@session.wait_timeout, @@session.interactive_timeout; (Query OK) result(20,10) |
�cursor.execute("select @@session.wait_timeout, @@session.interactive_timeout;") (Query OK) result(20,10) |
client A 在 T1 时刻将全局变量 wait_timeout 和 interactive_timeout 分别设置为 10s 和 20s。
client B 在 T2 时刻通过 mysql 客户端与 mysql server 建立连接(交互式连接),该连接中会话变量 wait_timeout 和 interactive_timeout 分别为 20s 和 20s, 因此可知交互式连接的会话变量 wait_timeout 和 interactive_timeout 都继承自全局变量 interactive_timeout 的值,接着 client B 在 T3 时刻,将会话变量 wait_timeout 设置为 10s,之后等待 15s,再查看会话变量 wait_timeout、interactive_timeout 时,发现连接已经断开,这说明交互式连接的连接闲置阈值由会话变量 wait_timeout 控制,client B 在 T6 时刻,将会话变量 wait_timeout 和 interactive_timeout 的值分别设置为 20s 和 10s,之后同样等待 15s,在 T8 时刻,再查看会话变量 wait_timeout、interactive_timeout 时,发现连接依旧未断开,直到 20s 后才断开连接,因此可知交互式连接的连接闲置阈值由会话变量 wait_timeout 控制,与会话变量 interactive_timeout 无关。
client C 在 T2 时刻通过 pymysql 与 mysql server 建立连接(非交互式连接),该连接中会话变量 wait_timeout 和 interactive_timeout 分别为 10s 和 20s, 因此可知非交互式连接的会话变量 wait_timeout 和 interactive_timeout 分别继承全局变量 wait_timeout 和 interactive_timeout 的值,接着 client C 在 T4 时刻等待 15s,再查看会话变量 wait_timeout、interactive_timeout 时,发现连接已经断开,这说明非交互式连接的连接闲置阈值由会话变量 wait_timeout 控制,client C 在 T6 时刻将会话变量 wait_timeout 和 interactive_timeout 的值分别设置为 20s 和 10s。之后等待 15s,在 T8 时刻,再查看会话变量 wait_timeout、interactive_timeout 时,发现连接依旧未断开,直到 20s 后才断开连接,因此可知非交互式连接的连接闲置阈值由会话变量 wait_timeout 控制,与会话变量 interactive_timeout 无关。
总结
- 交互式连接的会话变量 wait_timeout 和 interactive_timeout 都继承自全局变量 interactive_timeout 的值
- 非交互式连接的会话变量 wait_timeout 和 interactive_timeout 分别继承自全局变量 wait_timeout 和 interactive_timeout
- 无论是交互式连接还是非交互式连接,连接闲置阈值都由会话变量 wait_timeout 控制,与会话变量 interactive_timeout 无关。
FAQ
为什么叫交互式和非交互式连接?通俗解释不知道?
wait_timeout 和 interactive_timeout 参数应设置为多大?
- 参数 wait_timeout 和 interactive_timeout 应尽量设置成相同
- 设置为多大取决于业务,如果你面对的是成熟的开发(比如公司内部团队),可以设置小些,分钟级别就行。
参考资料
MySQL会话闲置时间控制
如何处理RDS MySQL连接数满情况
wait_timeout and interactive_timeout 参数的更多相关文章
- MySQL:参数wait_timeout和interactive_timeout以及空闲超时的实现【转】
一.参数意思 这里简单解释一下两个参数,含义如下: interactive_timeout:The number of seconds the server waits for activity on ...
- mysql wait_timeout和interactive_timeout总结
(1)interactive_timeout:参数含义:服务器关闭交互式连接前等待活动的秒数.交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE ...
- wait_timeout 和 interactive_timeout
wait_timeout 和 interactive_timeout Table of Contents 1. 参数说明 2. 原代码 3. interactive_timeout覆盖wait_tim ...
- MySQL 各种超时参数的含义
MySQL 各种超时参数的含义 今日在查看锁超时的设置时,看到show variables like '%timeout%';语句输出结果中的十几种超时参数时突然想整理一下,不知道大家有没有想过,这么 ...
- Got timeout reading communication packets解决方法
Got timeout reading communication packets解决方法 http://www.th7.cn/db/mysql/201702/225243.shtml [Note] ...
- 内网服务器离线编译安装mysql5.7并调优
目录 内网服务器离线编译安装mysql5.7并调优 前言 关于MySQL 一.MySQL安装篇 部署环境 前期准备工具 挂载系统ISO镜像,配置yum源 二.MySQL调优篇 1.对MySQL进行安全 ...
- 关于Aborted connection告警日志的分析
前言: 有时候,连接MySQL的会话经常会异常退出,错误日志里会看到"Got an error reading communication packets"类型的告警.本篇文章我们 ...
- MySQL中的配置参数interactive_timeout和wait_timeout(可能导致过多sleep进程的两个参数)
1)interactive_timeout:参数含义:服务器关闭交互式连接前等待活动的秒数.交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE选项的 ...
- MySQL中interactive_timeout和wait_timeout的区别
在用mysql客户端对数据库进行操作时,打开终端窗口,如果一段时间没有操作,再次操作时,常常会报如下错误: ERROR (HY000): Lost connection to MySQL server ...
- interactive_timeout和wait_timeout(
mysql> show variables like "%timeout%"; +-----------------------------+----------+ | Va ...
随机推荐
- Kingpin Private Browser - 隐私保护浏览器,隐身模式、广告拦截做你的私人浏览器
Kingpin Private Browser 是一个功能齐全的浏览器,隐身模式和广告拦截总是启用.它不会记住历史记录.密码或cookie.默认情况下,浏览器使用谷歌搜索(您可以在设置中将其更改为Du ...
- 【Visual Leak Detector】配置项 ForceIncludeModulesmd
说明 使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记.本篇介绍 VLD 配置文件中配置项 ForceIncludeModules 的使用方法. 同系列文章目录可见 <内存泄漏检测工具&g ...
- 最简单Openwrt ipv6配置,局域网WAN6中继模式获取原生ipv6地址
条件 condition wan 和 wan6 是默认配置 Wan and wan6 are the default configurations 同时wan6可以获取到原生IPv6 ...
- python之多线程操作
线程模块 Python3 通过两个标准库 _thread 和 threading 提供对线程的支持. _thread 提供了低级别的.原始的线程以及一个简单的锁,它相比于 threading 模块的功 ...
- [J2EE]SSM整合/Spring 与 MyBatis的整合【待续】
参考文献 spring与mybatis五种整合方法 - 博客园/推荐
- ILLA Cloud: 调用 Hugging Face Inference Endpoints,开启大模型世界之门
一个月前,我们 宣布了与 ILLA Cloud 与达成的合作,ILLA Cloud 正式支持集成 Hugging Face Hub 上的 AI 模型库和其他相关功能. 今天,我们为大家带来 ILLA ...
- Http请求get与post请求方式的各种相关面试总结
转载请注明出处: GET方法和POST方法是两种HTTP请求方法,GET方法通过URL传递参数,可以缓存,但参数长度有限,一般用于获取资源:POST方法通过表单传递参数,不能缓存,参数长度没有限制,一 ...
- csv数据集按比例分割训练集、验证集和测试集,即分层抽样的方法
一.一种比较通俗理解的分割方法 1.先读取总的csv文件数据: import pandas as pd data = pd.read_csv('D:\BaiduNetdiskDownload\weib ...
- SpringBoot入门(二):Controller的使用
Controller中注解的使用: @Controller ●该注解用来响应页面,必须配合模板来使用 @RestController ●该注解可以直接响应字符串,返回的类型为JSON格式 ...
- [Wechat]概念辨析:微信的生态平台/运管平台
0 引言 微信的各类XX社区.XX文档.XX平台,实在是太多,让人眼花缭乱.必须得理一理了. 1 微信公众平台 https://mp.weixin.qq.com/ 即 微信公众号(小程序 / 订阅号 ...