如何简单分析MySQL中的interactive_timeout和wait_timeout

分类:编程技术 时间:2024-02-20 16:01 浏览:0 评论:0
0
本文与大家分享如何简单分析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;

查询正常,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 秒)

登录到另一个会话

session2 [RO] 09:39:35 >从 information_schema.global_variables 中选择变量名称、变量值,其中变量名称位于 ('interactive_timeout','wait_timeout');

+-- ------------------------+----------------+

|变量名 |变量值 |

+---------------------+----- -------- --+

|交互超时 | 300 |

|等待超时| 28800 |

+------------------------------------+--------- -------+

集合中 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');

< p> +----------------- ---+----------------+

|变量名 |变量值 |

+- --------------------+---------------------------- --+

|交互超时 | 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。小编相信有些知识点在我们日常工作中可能会看到或者用到。希望您能从本文中了解更多信息。更多详情请关注行业资讯频道。

1. 本站所有资源来源于用户上传或网络,仅作为参考研究使用,如有侵权请邮件联系站长!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > 如何简单分析MySQL中的interactive_timeout和wait_timeout

用户评论