广告
返回顶部
首页 > 资讯 > 数据库 >MySQL中如何浅析interactive_timeout和wait_timeout
  • 510
分享到

MySQL中如何浅析interactive_timeout和wait_timeout

2024-04-02 19:04:59 510人浏览 独家记忆
摘要

本篇文章给大家分享的是有关Mysql中如何浅析interactive_timeout和wait_timeout,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编

本篇文章给大家分享的是有关Mysql中如何浅析interactive_timeout和wait_timeout,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

一 前言
  这篇文章源于自己一个无知的提问,作为一个DBA 老鸟,实在汗颜 。如图,修改wait_timeout参数之后 并没有及时生效,于是乎去跑到技术支持群里问了。。ps 应该去查g.cn 才对。。
 MySQL中如何浅析interactive_timeout和wait_timeout
  本文通过测试我们要弄清楚两个问题
  a 继承关系 wait_timeout在session和global级别分别继承那个参数?
  b 生效参数 在会话中到底哪个参数决定了会话的存活时间?

二 参数介绍  
首先说明两个关键词 通过mysql 客户端连接db的是交互会话,通过jdbc等程序连接db的是非交互会话
interactive_timeout: Mysql服务器关闭交互式连接前等待的秒数。交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE选项的客户端。参数默认值:28800秒(8小时)
wait_timeout:          MySQL服务器关闭非交互连接之前等待的秒数。在会话启动时,根据全局wait_timeout值或全局interactive_timeout值初始化会话wait_timeout值,取决于客户端类型--由mysql_real_connect()的连接选项CLIENT_INTERACTIVE定义。参数默认值:28800秒(8小时)
2.1 继承关系 
1) 单独设置global级别的interactive_timeout  

  1. set global interactive_timeout = 300

  2. session1 [RO] 09:34:20 >set global interactive_timeout=300;

  3. Query OK, 0 rows affected (0.00 sec)

  4. session1 [RO] 09:39:15 >select variable_name,variable_value from infORMation_schema.global_variables where variable_name in ('interactive_timeout','wait_timeout');

  5. +---------------------+----------------+

  6. | variable_name       | variable_value |

  7. +---------------------+----------------+

  8. | INTERACTIVE_TIMEOUT | 300            |

  9. | WAIT_TIMEOUT        | 28800          |

  10. +---------------------+----------------+

  11. 2 rows in set (0.00 sec)

  12. session1 [RO] 09:39:21 >select variable_name,variable_value from information_schema.session_variables where variable_name in ('interactive_timeout','wait_timeout');

  13. +---------------------+----------------+

  14. | variable_name       | variable_value |

  15. +---------------------+----------------+

  16. | INTERACTIVE_TIMEOUT | 300            |

  17. | WAIT_TIMEOUT        | 28800          |

  18. +---------------------+----------------+

  19. 2 rows in set (0.00 sec)

  20. 登陆另外一个会话

  21. session2 [RO] 09:39:35 >select variable_name,variable_value from information_schema.global_variables where variable_name in ('interactive_timeout','wait_timeout');

  22. +---------------------+----------------+

  23. | variable_name       | variable_value |

  24. +---------------------+----------------+

  25. | INTERACTIVE_TIMEOUT | 300            |

  26. | WAIT_TIMEOUT        | 28800          |

  27. +---------------------+----------------+

  28. 2 rows in set (0.00 sec)

  29. session2 [RO] 09:39:51 >select variable_name,variable_value from information_schema.session_variables where variable_name in ('interactive_timeout','wait_timeout');

  30. +---------------------+----------------+

  31. | variable_name       | variable_value |

  32. +---------------------+----------------+

  33. | INTERACTIVE_TIMEOUT | 300            |

  34. | WAIT_TIMEOUT        | 300            |

  35. +---------------------+----------------+

  36. 2 rows in set (0.00 sec)

分析
  在交互模式下,session和global级别的 interactive_timeout 继承了 interactive_timeout global的值。而 wait_timeout 的值,session级别继承了interactive_timeout。global级别的wait_timeout 则不受影响 。
2) 设置session级别的 interactive_timeout 

  1. session1 [RO] 09:44:07 >set session interactive_timeout=300;

  2. Query OK, 0 rows affected (0.00 sec)

  3. session1 [RO] 09:44:27 >select variable_name,variable_value from information_schema.global_variables where variable_name in ('interactive_timeout','wait_timeout');

  4. +---------------------+----------------+

  5. | variable_name       | variable_value |

  6. +---------------------+----------------+

  7. | INTERACTIVE_TIMEOUT | 28800          |

  8. | WAIT_TIMEOUT        | 28800          |

  9. +---------------------+----------------+

  10. 2 rows in set (0.00 sec)

  11. session1 [RO] 09:44:31 >select variable_name,variable_value from information_schema.session_variables where variable_name in ('interactive_timeout','wait_timeout');

  12. +---------------------+----------------+

  13. | variable_name       | variable_value |

  14. +---------------------+----------------+

  15. | INTERACTIVE_TIMEOUT | 300            |

  16. | WAIT_TIMEOUT        | 28800          |

  17. +---------------------+----------------+

  18. 2 rows in set (0.00 sec)

  19. 另外开启一个会话

  20. session2 [RO] 09:44:41 >select variable_name,variable_value from information_schema.session_variables where variable_name in ('interactive_timeout','wait_timeout');

  21. +---------------------+----------------+

  22. | variable_name | variable_value |

  23. +---------------------+----------------+

  24. | INTERACTIVE_TIMEOUT | 28800 |

  25. | WAIT_TIMEOUT | 28800 |

  26. +---------------------+----------------+

  27. 2 rows in set (0.01 sec)

  28. session2 [RO] 09:44:44 >select variable_name,variable_value from information_schema.global_variables where variable_name in ('interactive_timeout','wait_timeout');

  29. +---------------------+----------------+

  30. | variable_name       | variable_value |

  31. +---------------------+----------------+

  32. | INTERACTIVE_TIMEOUT | 28800          |

  33. | WAIT_TIMEOUT        | 28800          |

  34. +---------------------+----------------+

  35. 2 rows in set (0.00 sec)

分析
  从上面的例子来看 wait_timeout 并不受session级别的interactive_timeout的值的影响。  
3) 同时设置两者的值,且不同。

  1. session1 [RO] 09:46:42 >

  2. (none) [RO] 09:46:42 >set global interactive_timeout=300;

  3. Query OK, 0 rows affected (0.00 sec)

  4. session1 [RO] 09:46:55 >set global wait_timeout=360;

  5. Query OK, 0 rows affected (0.00 sec)

  6. 另开启一个会话

  7. session2 [RO] 09:47:20 >select variable_name,variable_value from information_schema.session_variables where variable_name in ('interactive_timeout','wait_timeout');

  8. +---------------------+----------------+

  9. | variable_name       | variable_value |

  10. +---------------------+----------------+

  11. | INTERACTIVE_TIMEOUT | 300            |

  12. | WAIT_TIMEOUT        | 300            |

  13. +---------------------+----------------+

  14. 2 rows in set (0.00 sec)

  15. session2 [RO] 09:47:22 >select variable_name,variable_value from information_schema.global_variables where variable_name in ('interactive_timeout','wait_timeout');

  16. +---------------------+----------------+

  17. | variable_name       | variable_value |

  18. +---------------------+----------------+

  19. | INTERACTIVE_TIMEOUT | 300            |

  20. | WAIT_TIMEOUT        | 360            |

  21. +---------------------+----------------+

  22. 2 rows in set (0.00 sec)

分析
 从案例1 2中可以得出session级别的wait_timeout 继承global 级别的 interactive_timeout 的值 global级别的session则不受影响。在没有改变 interactive_timeout的值的情况下,去修改wait_timeout的值
 结果无效。就会出现前言中我遇到的情况。
2.2 有效参数
  通过一个例子检测影响会话的参数是哪个?验证方式通过设置全局的timeout时间(注意两者时间不同),另外起一个会话

  1. session1 [RO] 10:20:56 >set global interactive_timeout=20;

  2. Query OK, 0 rows affected (0.00 sec)

  3. session1 [RO] 10:23:32 >set global wait_timeout=10;

  4. Query OK, 0 rows affected (0.00 sec)

会话2进行查询

  1. mysql> select sleep(5);

  2. +----------+

  3. | sleep(5) |

  4. +----------+

  5. | 0        |

  6. +----------+

  7. 1 row in set (5.01 sec)

然后在session1 中 查看show processlist;
MySQL中如何浅析interactive_timeout和wait_timeout
分析
    交互式 timeout时间受global级别的interactive_timeout影响。
2)非交互模式
  目前的测试并没有达到预期,测试模型如下设置

  1. mysql> select variable_name,variable_value from information_schema.session_variables where variable_name in ('interactive_timeout','wait_timeout');

  2.   +---------------------+----------------+

  3.   | variable_name       | variable_value |

  4.   +---------------------+----------------+

  5.   | INTERACTIVE_TIMEOUT | 35             |

  6.   | WAIT_TIMEOUT        | 35             |

  7.   +---------------------+----------------+

  8.   2 rows in set (0.00 sec)

  9.   mysql> select variable_name,variable_value from information_schema.global_variables where variable_name in ('interactive_timeout','wait_timeout');

  10.   +---------------------+----------------+

  11.   | variable_name       | variable_value |

  12.   +---------------------+----------------+

  13.   | INTERACTIVE_TIMEOUT | 35             |

  14.   | WAIT_TIMEOUT        | 25             |

  15.   +---------------------+----------------+

  16.   2 rows in set (0.00 sec)

python命令行中模拟非交互数据来访问数据库,查看数据库timeout参数。同时在数据库中执行show processlist 查看Python的连接多久会被关闭。
MySQL中如何浅析interactive_timeout和wait_timeout
查看session级别的参数
MySQL中如何浅析interactive_timeout和wait_timeout
查看show processlist,通过python程序连接数据库的会话等待了25s之后,被中断。
MySQL中如何浅析interactive_timeout和wait_timeout
分析
1 通过python 命令行获取的timeout 参数和交互方式获取的并不一致,在交互命令行中获取session级别的wait_timeout 的值为35,使用非交互命令获取的值为25,说明wait_timeout继承全局的wait_timeout。
2 交互模式下会话空闲时间超过wait_timeout立即会被断开。

3) 思考题
  session1 通过非交互命令连接到db,此时全局的wait_timeout的值是28800,session 2 修改全局的wait_timeout 为30s ,问题 session1的会话会受到影响吗?

三 总结
 1 timeout 只是针对空闲会话有影响。
 2 session级别的wait_timeout继承global级别的interactive_timeout的值。而global级别的session则不受interactive_timeout的影响。
 3 交互式会话的timeout时间受global级别的interactive_timeout影响。因此要修改非交互模式下的timeout,必须同时修改interactive_timeout的值。
 4 非交互模式下,wait_timeout参数继承global级别的wait_timeout。

以上就是MySQL中如何浅析interactive_timeout和wait_timeout,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网数据库频道。

您可能感兴趣的文档:

--结束END--

本文标题: MySQL中如何浅析interactive_timeout和wait_timeout

本文链接: https://www.lsjlt.com/news/66124.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • mysql中describe怎么用
    mysql 中的 describe 命令用于获取表的元数据信息,包括:字段名称、数据类型、长度、是否允许空值、默认值、键。它返回一个结果集,包含有关表结构、列类型、约束和索引的详细信息。...
    99+
    2024-04-29
    mysql
  • mysql中like怎么用
    like 运算符用于 mysql 中的模式匹配,它使用通配符匹配字符序列,包括:%:匹配零个或多个字符。_:匹配单个字符。[ ]:匹配方括号内列出的任何字符。 MySQL 中 LIKE...
    99+
    2024-04-29
    mysql
  • mysql中当前日期和时间的函数
    mysql 中获取当前日期和时间的函数共有三个:1. now() 函数:返回当前日期和时间,格式为 'yyyy-mm-dd hh:mm:ss';2. curdate() 函数:返回当前日...
    99+
    2024-04-29
    mysql
  • mysql中的round函数是什么函数
    mysql 中的 round 函数用于对数字进行四舍五入,语法为 round(number, decimal_places),其中 number 为要舍入的数字,decimal_plac...
    99+
    2024-04-29
    mysql
  • mysql中double表达的意思
    mysql中的double数据类型是一种64位浮点数,用于存储高精度浮点数。特点包括:1. 精度高达15-16位有效数字;2. 取值范围为-1.7976931348623157e+308...
    99+
    2024-04-29
    mysql
  • mysql中删除列的命令
    mysql 中删除列的命令是 alter table,语法为 alter table table_name drop column column_name,可用于删除非主键列,删除前列中...
    99+
    2024-04-29
    mysql
  • mysql中删除记录的命令
    mysql 中删除记录的命令是 delete。其语法为:delete from table_name where condition;其中,table_name 是目...
    99+
    2024-04-29
    mysql 数据丢失
  • mysql中内连接,左连接和右连接的区别
    mysql 中内连接、左连接和右连接的区别在于:内连接只返回同时在两个表中匹配的行,而左连接返回左表所有行,包含匹配右表行,右连接返回右表所有行,包含匹配左表行。内连接语法:selec&...
    99+
    2024-04-29
    mysql
  • mysql中内连接查询的on后面怎么写
    inner join 后面的 on 语句用于指定用于比较和匹配表的列。语法为:on = 。其他要点:1. 运算符可替换为 >、= 和 在 MySQL 中,INNER ...
    99+
    2024-04-29
    mysql
  • mysql中replace函数的使用方法
    mysql 中的 replace() 函数用于替换字符串中的字符或子字符串,其语法为:replace(string, search_string, replace_string)。它支持...
    99+
    2024-04-29
    mysql
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作