wait_timeout and interactive_timeout 参数
2023/6/8 18:22:33
本文主要是介绍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 | 交互式连接建立完成后,使用过程中的等待时间(单位:秒) |
- python 代码mysql_variable_wait_timeout_interactive_timeout.py
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 参数的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15PingCAP 黄东旭参与 CCF 秀湖会议,共探开源教育未来
- 2024-05-13PingCAP 戴涛:构建面向未来的金融核心系统
- 2024-05-09flutter3.x_macos桌面os实战
- 2024-05-09Rust中的并发性:Sync 和 Send Traits
- 2024-05-08使用Ollama和OpenWebUI在CPU上玩转Meta Llama3-8B
- 2024-05-08完工标准(DoD)与验收条件(AC)究竟有什么不同?
- 2024-05-084万 star 的 NocoDB 在 sealos 上一键起,轻松把数据库编程智能表格
- 2024-05-08Mac 版Stable Diffusion WebUI的安装
- 2024-05-08解锁CodeGeeX智能问答中3项独有的隐藏技能
- 2024-05-08RAG算法优化+新增代码仓库支持,CodeGeeX的@repo功能效果提升