mysql定期清理会话_MySQL会话闲置时间控制
导读
作者:魏新平
知数堂第5期MySQL实战班学员,第10期MySQL优化班学员,现任职助教。
现象
当我们用MySQL客户端或者程序(如Java,Python等)连接MySQL后,如果闲置一段时间(就是不执行任何SQL),再次执行SQL的时候就会报失去连接的错误,如:
ERROR2006(HY000): MySQL server has gone away
或
Lostconnection to MySQL server during query
这是MySQL控制连接数的机制,会自动把一些闲置时间超过配置值的连接kill掉。
闲置时间配置参数
这里涉及的参数有两个,wait_timeout和interactive_timeout。而MySQL的参数又分为GLOBAL级别和SESSION级别,所以严格的讲,会涉及到四个参数。
参数的官方解释:
interactive_timeout: The number of seconds the server waits for activity on an interactive connection before closing it. An interactive client is defined as a client that uses the CLIENT_INTERACTIVE option to mysql_real_connect().
翻译:interactive_timeout控制交互式连接的空闲时间,如果调用mysql的mysql_real_connect()函数的时候,使用了CLIENT_INTERACTIVE参数,该连接就定义为交互式连接。
wait_timeout: The number of seconds the server waits for activity on a noninteractive connection before closing it.
翻译:wait_timeout控制非交互连接的闲置时间。
On thread startup, the session waittimeout value is initialized from the global wait_timeoutvalue or from the global interactive_timeoutvalue, depending on the type of client (as defined by the CLIENT_INTERACTIVE connect option to mysql_real_connect()). See also interactive_timeout.
翻译:在连接建立的时候,session级别的wait_timeout会根据连接的分类来选择是继承global级别的interactive_timeout的值和global级别的wait_timeout的值。
看完官方针对interactive_timeout和wait_timeout的解释,其实会发现写的挺让人难以理解的,没有讲清楚SESSION级别和GLOBAL级别的两个参数是如何控制连接的闲置时间的,而且很难区分什么是交互式连接,什么是非互式连接,只能从源代码层面去区分。
接下来我们平常使用的连接方式来做实验(使用的MySQL版本为Percona的MySQL5.7)。
实验一:
先分别设置GLOBAL级别的interactive_timeout和wait_timeout。
1、重新用MySQL客户端开一个窗口,查看SESSION参数
可以看出SESSION级别的wait_timeout和interactive_timeout都继承了GLOBAL.interactive_timeout的值,也就是说mysql客户端属于交互式连接。
2、用PyMySQL查看参数值(Python3版本)
结果为
{'@@GLOBAL.interactive_timeout':20,'@@GLOBAL.wait_timeout':40,'@@session.interactive_timeout':20,'@@session.wait_timeout':40}
结论:SESSION级别的wait_timeout和interactive_timeout继承了各自的GLOBAL级别的值,也就是说Python的Pymysql连接被定义为非交互式连接。
实验二:
1、MySQL官方客户端
然后用同样的方式去测试剩下的三个参数,发现只有修改SESSION级别的wait_timeout才会有
ERROR 2006(HY000): MySQL server has gone away
错误(请务必在同一个会话当中测试)。
2、Pymysql(Python3)
用另外3个参数来运行上述代码,只有修改session级别wait_timeout才会出现如下错误:
pymysql.err.OperationalError: (2013,'Lost connection to MySQL server during query')
结论:从实验二可以看出,针对已经存在的连接来说,交互式和非交互式连接的闲置时间都是由SESSION级别的wait_timeout控制的。
总结
1、交互式连接和非交互式连接的空闲时间都是由SESSION级别的wait_timeout时间控制的
2、SESSION级别的wait_timeout值是再连接初始化的时候,根据连接的分类来确定是从GLOBAL 级别的interactive_timeout值继承还是GLOBAL级别的wait_timeout值继承
3、SESSION级别的interactive_timeout对连接的闲置时间没有用处
加入知数堂
挑战40万+年薪!
知数堂
叶金荣与吴炳锡联合打造
领跑IT精英培训
行业资深专家强强联合,倾心定制
MySQL实战/MySQL优化/MongoDB/
Python/ SQL优化/Hadoop+ELK
数门精品课程
“阅读原文”可获更多正课试听视频
密码:hg3h
紧随技术发展趋势,定期优化培训教案
融入大量生产案例,贴合企业一线需求
社群陪伴学习,一次报名,可学1年
DBA、开发工程师必修课
上千位学员已华丽转身,薪资翻番,职位提升
改变已悄然发生,你还在等什么?
扫码加入QQ技术交流群
MySQL 8.0|MGR研究院-ZST
(QQ群号:650149401)
mysql定期清理会话_MySQL会话闲置时间控制相关推荐
- mysql 锁 会话_MySQL会话锁等待关系原理
会话依赖关系主要需要理解锁等待相关四张表的关系: 先查询当前会话持有哪些事务的锁和依赖哪些事务的锁,通过这两种锁就可以得到一种图关系. 一:查询当前会话持有的锁: 1.查询当前会话processlis ...
- mysql暂停触发器_mysql如何临时禁用触发器
mysql如何临时禁用触发器 起因 Mysql的触发器,在触发控制上,只能按照对数据的操作方式(Insert,Update,Delete)以及操作前后(before,after)进行触发控制.但是如果 ...
- mysql 视图 字典_MySQL深入01-SQL语言-数据字典-服务器变量-数据操作DML-视图
SQL语言的组成部分 常见分类:DDL:数据定义语言 DCL:数据控制语言,如授权 DML:数据操作语言 其它分类:完整性定义语言: DDL的一部分功能约束 约束:包括主键,外键,唯一键,条件,非空, ...
- mysql 缓冲查询_MySQL查询高速缓冲
可以在SELECT语句中指定查询缓存相关选项: · SQL_CACHE 如果query_cache_type系统变量的值是ON或DEMAND,查询结果被缓存. · SQL_NO_CACHE 查询结果不 ...
- [mysql] 变量、处理程序和流程控制
目录 变量 定义 系统变量 查看.修改 用户变量 会话用户变量 局部变量 对比 定义条件和处理程序 定义条件 处理程序 流程控制 条件判断 IF CASE 循环语句 LOOP WHILE REPEAT ...
- mysql 慢查询优化_MySQL 性能优化之慢查询
性能优化的思路 首先需要使用慢查询功能,去获取所有查询时间比较长的SQL语句 其次使用explain命令去查询由问题的SQL的执行计划(脑补链接:点我直达1,点我直达2) 最后可以使用show pro ...
- mysql -a 参数_mysql参数及解释
key_buffer_size:(global.Dynamic)#*** MyISAM特有的选项.即使你不使用MyISAM表,你仍应该将它设置为8-64M,因为它也被用于内部的临时磁盘表.这个参数是用 ...
- mysql事务编号_Mysql事务
一:mysql事务 1.需求 从orders表中查询最新的销售订单编号,并使用下一个销售订单编号作为新的销售订单编号. 在指定客户的orders表中插入新的销售订单. 将新的销售订单项目插入order ...
- mysql 锁定表_MySQL表锁定
在本教程中,您将学习如何使用MySQL锁来协调会话之间的表访问. MySQL允许客户端会话明确获取表锁,以防止其他会话在特定时间段内访问表.客户端会话只能为自己获取或释放表锁.它不能获取或释放其他会话 ...
最新文章
- 告别「灭霸式审稿」,IJCAI-21 的投稿者爽到家!
- 芝麻HTTP:TensorFlow基础入门
- hihocoder1513 小Hi的烦恼
- Python练习题:合并列表和列表排序
- 【整理】各种语言的API文档
- LeetCode 3:无重复字符的最长子串 思考分析
- LeetCode 470. 用 Rand7() 实现 Rand10()(随机概率)
- 【剑指offer】面试题50:第一个只出现一次的字符(java)
- 版本向量 使用css时正确区分IE版本[转]
- mac pro制作iso系统光盘
- 店宝宝电脑版_母婴店主干货分享:母婴店利润究竟有多大?
- Mysql 时间戳类型使用心得
- 单片机(MCU)最强科普(万字总结,值得收藏)
- #pragma comment(lib,ws2_32.lib)
- python操作腾讯文档_Python操作Excel文档
- 融入动画技术的交互应用优秀作业推荐
- python系列11:python的游戏引擎
- Super expression must either be null or a function错误
- 三分钟读懂客户端证书
- grpc、https、oauth2等认证专栏实战17:grpc-go自定义认证之base64验证介绍
热门文章
- 总计2171个BTC被盗,这个钱包漏洞的受害者越来越多
- Varnish——CDN推送平台管理(web界面批量清除缓存)
- 使用uniapp开发社区交友网站的项目教程
- 《人工智能》机器学习 - 第5章 逻辑回归(二 二元逻辑回归实战)
- 什么叫水平,不是看懂了叫水平,也不是会用了就叫水平,更不是懂得更多才叫有水平,而是知道如何做才能做得更好才叫真正有水平?...
- kafka分区副本机制
- 时间轴-新年倒计时(实操java)
- asynctaskdemo(Info)5
- CF外挂界令人发指的垃圾外挂!让你接触不为人知的内幕!
- [年终总结]愿你永远清澈明朗,眼里有光