如何简单分析MySQL中的interactive_timeout和wait_timeout
1 前言
本文源于我的一个无知问题。作为一名资深DBA,我实在是汗颜。如图,修改wait_timeout参数后,没有及时生效,于是去技术支持群询问。 。 ps你应该检查g.cn。 。
本文需要通过测试澄清两个问题
继承关系 wait_timeout 分别在会话和全局层面继承哪个参数?
b 有效参数 会话中的哪个参数决定了会话的生存时间?
两个参数介绍
首先解释一下t他有两个关键词。通过 MySQL 客户端连接 db 的方式是交互式会话,通过 jdbc 等程序连接 db 的方式是非交互式会话。
interactive_timeout:MySQL服务器在关闭交互式连接之前等待的秒数。交互式客户端被定义为使用 mysql_real_connect() 中的 CLIENT_INTERACTIVE 选项的客户端。参数默认值:28800秒(8小时)
wait_timeout:MySQL服务器在关闭非交互式连接之前等待的秒数。在会话启动时,会话 wait_timeout 值根据全局 wait_timeout 值或全局 Interactive_timeout 值进行初始化,具体取决于客户端类型 - 由 mysql_real_connect() 的连接选项 CLIENT_INTERACTIVE 定义。参数默认值:28800秒(8小时)
2.1继承关系
1)设置全局级别的interactive_timeout分隔ely
设置全局interactive_timeout = 300
session1 [RO] 09:34:20 >设置全局interactive_timeout=300;
p>
查询正常,0 行受影响(0.00 秒)
session1 [RO] 09:39:15 >从 information_schema.global_variables 中选择变量名、变量值,其中变量名 in ('interactive_timeout ','wait_timeout');
+--------------------+--------- -------+
+---------------------+--------- ----- --+
|交互超时 | 300 |
|等待超时| 28800 |
+--------------------+---------------- --+
集合中 2 行(0.00 秒)
session1 [RO] 09:39:21 >从 information_schema 中选择变量名、变量值。 session_variables where variable_name in ('interactive_timeout','wait_timeout' );
+--------------------------------+-- --------------+
|变量名 |变量值 |
+----- ----------------+---------------------------- --+
|交互超时 | 300 | 300
|等待超时| 28800 |
+----------------------------------------+ --------- -------+
一组 2 行(0.00 秒)
登录到另一个会话
p>
session2 [RO] 09:39:35 >从 information_schema.global_variables 中选择变量名称、变量值,其中变量名称位于 ('interactive_timeout','wait_timeout');
+-- ------------------------+----------------+
p>
|变量名 |变量值 |
+---------------------+----- -------- --+
|交互超时 | 300 |
|等待超时| 28800 |
+------------------------------------+--------- -------+
p>
集合中 2 行(0.00 秒)
session2 [RO] 09:39:51 >选择变量名,来自 information_schema.session_variables 的变量值,其中变量名 in ('interactive_timeout', 'wait_timeout');
+-------------------- --+---------- -----+
|变量名 |变量值 |
+---------------- -----+----------------+
|交互超时 | 300 |
|等待超时| 300 | 300
+--------------------+------------ ----- +
集合中 2 行(0.00 秒)
分析
交互模式,会话和全局级别Interactive_timeout继承interactive_timeout全局值。至于wait_timeout的值,会话级别继承interactive_timeout。全局级别的 wait_timeout 不受影响。
2) 设置会话级interactive_timeout
session1 [RO] 09:44:07 >set session Interactive_timeout=300;< br/>
查询正常,0 行受影响(0.00 秒)
session1 [RO] 09:44:27 >从 information_schema.global_variables 中选择变量名、变量值,其中variable_name in ('interactive_timeout','wait_timeout');
+---------------------------- +----------------+
|变量名 |变量值 |
+---------------------+---------- ------+
|交互超时 | 28800 |
|等待超时| 28800 |
+------------------------------------+--------- -------+
2行一组(0.00秒)
session1 [RO] 09:44:31 >选择variable_name ,来自 information_schema.session_variables 的变量值,其中变量名 in ('interactive_timeout','wait_timeout') ;
+-------------------- --+----------------+
|变量名 |变量值 |
+---------------- -----+---------------------------- --+
|交互超时 | 300 |
|等待超时| 28800 |
+--------------------+------------ ---- -+
集合中 2 行(0.00 秒)
打开另一个会话
session2 [RO] 09:44:41 >从 information_schema.session_variables 中选择变量名、变量值,其中变量名 in ('interactive_timeout','wait_timeout');
+-------- ----- ----------+----------------+
|变量名 |变量值 |
+------------------------+------------ ----+
|交互超时 | 28800 |
|等待超时| 28800 |
+-----------------+---------------- --+
集合中 2 行(0.01 秒)
session2 [RO] 09:44:44 >从 information_schema 中选择变量名、变量值。 global_variables where variable_name in ('interactive_timeout','wait_timeout');
+------------------------ -- -+----------------+
|变量名 |变量值 |
+--- ------------------+---------------------------- --+
|交互超时 | 28800 |
|等待超时| 28800 |
+---------------------------------------- -+-------- --------+
2 行一组(0.00 秒)
分析
从上面的例子来看,wait_timeout不受会话级interactive_timeout值的影响。
3)同时设置两者的值,并使其不同。
session1 [RO] 09:46:42 >
(无)[RO] 09:46:42 >设置全局interactive_timeout=300;
查询正常,受影响 0 行(0.00 秒)
session1 [RO] 09:46:55 >set global wait_timeout= 360;
查询正常, 0 行受影响(0.00 秒)
打开另一个会话
session2 [RO] 09:47:20 >从 information_schema 中选择变量名、变量值。 session_variables where variable_name in ('interactive_timeout','wait_timeout');
+--------------------------------+-- --- -----------+
|变量名 |变量值 |
+------------ ----------+---------------- -+
|交互超时 | 300 |
|等待超时| 300 |
+----------------------------+----- ---- -------+
集合中 2 行(0.00 秒)
session2 [RO] 09:47: 22 >选择变量名,来自 information_schema.global_variables 的variable_value,其中variable_name in ('interactive_timeout','wait_timeout');
+-------------- ----- -+----------------+
|变量名 |变量值 |
+------------------------+---------- ------+
|交互超时 |第 300 章等待超时| 360 |
+----------------------------------------+-- ------- --------+
集合中 2 行(0.00 秒)
分析< br/> 从情况1和情况2可以得出,会话级wait_timeout继承了全局级interactive_timeout的值,全局级会话不受影响。在不改变interactive_timeout的值的情况下,修改wait_timeout的值
结果无效。我在前言中遇到的情况就会发生。
2.2 有效参数
使用示例来检测哪个参数影响会话?验证方法是设置全局超时时间(注意两个时间不同)并启动另一个会话
session1 [RO] 10:20:56 >set global Interactive_timeout=20;
查询正常,0行受影响(0.00秒)
session1 [RO] 10:23:32 >set global wait_timeout=10;
查询正常,0 行受影响(0.00 秒)
查询会话2
mysql> select sleep(5);
+-------- --+
|睡眠(5) |
+----------+
| 0 |
+----------+
一组 1 行(5.01 秒)
然后查看session1中的show processlist;
分析
交互超时时间受全局级别interactive_timeout影响。
2)非交互模式
目前的测试没有达到预期。测试模型设置如下
mysql> select variable_name,variable_value from information_schema.session_variables where variable_name in ('interactive_timeout','wait_timeout');
|变量名 |变量值 |
+- --------------------+---------------------------- --+
|交互超时 | 35 |
|等待超时| 35 |
+----------------- ---+---------------------------- -+
集合中的2行(0.00秒)
mysql>从information_schema.global_variables中选择variable_name,variable_value,其中variable_name in('interactive_timeout', '等待超时');
+------------------------+---------------- --- +
|变量名 |变量值 |
+--------------------- +---------------- --+
|交互超时 | 35 |
|等待超时| 25 | 25
+------------------------+---------------- --- +
2 rows in set (0.00 sec)
在python命令行中模拟非交互式数据访问数据库并检查数据库超时参数。同时在数据库中执行show processlist,查看python连接需要多长时间才会关闭编辑。
检查会话级别参数
查看show processlist。通过python程序连接数据库的会话等待25秒后被中断。
分析
1通过python通过命令行获取的超时参数与通过交互方式获取的超时参数不一致。交互命令行获取的会话级wait_timeout值为35,非交互命令获取的值为25,说明wait_timeout继承了全局wait_timeout。
2 在交互模式下,如果会话空闲时间超过wait_timeout,会话将立即断开。
3)思考问题
Session1通过非交互式命令连接到数据库。此时全局wait_timeout值为28800。会话2将全局wait_timeout修改为30s。问题 session1 我的会话会受到影响吗?
三小结
1 超时仅影响空闲会话。
2 会话级wait_timeout继承了全局级interactive_timeout的值。全局级别的会话不受interactive_timeout的影响。
3 交互会话的超时时间受全局级别interactive_timeout影响。因此,要修改非交互模式下的超时时间,必须同时修改interactive_timeout的值。
4 非交互模式下,wait_timeout参数继承全局级别的wait_timeout。
以上就是如何简单分析MySQL中的interactive_timeout和wait_timeout。小编相信有些知识点在我们日常工作中可能会看到或者用到。希望您能从本文中了解更多信息。更多详情请关注行业资讯频道。
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > 如何简单分析MySQL中的interactive_timeout和wait_timeout