开发者社区 > 博文 > interactive_timeout和wait_timeout的困惑
分享
  • 打开微信扫码分享

  • 点击前往QQ分享

  • 点击前往微博分享

  • 点击复制链接

interactive_timeout和wait_timeout的困惑

  • 京东云技术交付部
  • 2021-01-26
  • IP归属:未知
  • 159600浏览

客户希望设置参数,将长时间的空闲连接断开,这里涉及到interactive_timeoutwait_timeout,这两个MySQL的默认值是28800(单位秒,对应8小时)

京东云控制台默认设置为86400(24小时)
这两个参数字面含义如下:
(1)interactive_timeout:
服务器关闭交互式连接前等待活动的秒数,比如mysql客户端属于此类连接。
(2)wait_timeout:
服务器关闭非交互连接之前等待活动的秒数,比如jdbc属于此类连接。

但对于空闲连接的控制,实际在于session级别的wait_timeout,而这个session级别的参数,并不完全取决于globalwait_timeout,看下面例子:

改参数前:mysql> show variables where variable_name in('interactive_timeout','wait_timeout');
+---------------------+-------+
| Variable_name       | Value |
+---------------------+-------+
| interactive_timeout | 28800 |
| wait_timeout        | 28800 |
+---------------------+-------+

mysql客户端修改全局参数wait_timeout10s
mysql> set global wait_timeout=10;
Query OK, 0 rows affected (0.00 sec)

打开另外一个客户端,查看此参数值:
mysql> show variables where variable_name in('interactive_timeout','wait_timeout');
+---------------------+-------+
| Variable_name       | Value |
+---------------------+-------+
| interactive_timeout | 28800 |
| wait_timeout        | 28800 |
+---------------------+-------+
2 rows in set (0.00 sec)

发现session级别的值并没有改为10,再看一下全局参数:
mysql> show global variables where variable_name in('interactive_timeout','wait_timeout');
+---------------------+-------+
| Variable_name       | Value |
+---------------------+-------+
| interactive_timeout | 28800 |
| wait_timeout        | 10    |
+---------------------+-------+
2 rows in set (0.00 sec)

全局参数确实修改了,但session级别的wait_timeout取决于客户端的连接方式,此时mysql客户端是交互式连接方式,因此session级别的wait_timeout取决于全局的interactive_timeout,所以看上去没变,对于连接来说实际没有生效,10s后并不会断开。此时如果我们将interactive_timeout改为20s,再看一下效果:

mysql> set global interactive_timeout=20;
Query OK, 0 rows affected (0.00 sec)

另外一个客户端看session参数,wait_timeout已经修改为20
mysql> show variables where variable_name in('interactive_timeout','wait_timeout');
+---------------------+-------+
| Variable_name       | Value |
+---------------------+-------+
| interactive_timeout | 20    |
| wait_timeout        | 20    |
+---------------------+-------+
2 rows in set (0.00 sec)

总结一下:

1.     空闲连接是否生效,却决于session级别的wait_timeout

2.     如果有修改参数需求,建议将wait_timeoutinteractive_timeout一起修改,避免受客户端类型影响。


感谢各位童鞋阅读,如果能够对大家有所帮助,欢迎点赞转发评论。

关注我们的公众号:云服务飞行团,更多内容持续放送!

扫码关注公众号哦~
更多内容敬请期待

 

共0条评论