• wait_timeout 和 interactive_timeout


    wait_timeout 和 interactive_timeout

    1 参数说明

    这里简单解释一下两个参数含义如下:

    interactive_timeout:对于交互式客户端创建的连接, MySQL允许的最大空闲时间

    wait_timeout: 非交互式客户端创建的连接,MySQL允许的最大空闲时间。

    在线程启动的时候,wait_timeout 的值取自于全局设置的wait_timeout 或者全局的 interactive_timeout。

    交互式客户端指的是mysqladmin ,navicate 等工具。非交互式客户端,一般指的是jdbc等驱动等。

    2 原代码

    • interactive_timeout

      static Sys_var_ulong Sys_interactive_timeout( vio_io_wait  "interactive_timeout",
             "The number of seconds the server waits for activity on an interactive "
             "connection before closing it",
             SESSION_VAR(net_interactive_timeout),
             CMD_LINE(REQUIRED_ARG),
             VALID_RANGE(1, LONG_TIMEOUT),
             DEFAULT(NET_WAIT_TIMEOUT),
             BLOCK_SIZE(1));
      
    • wait_timeout

      static Sys_var_ulong Sys_net_wait_timeout(
             "wait_timeout",
             "The number of seconds the server waits for activity on a "
             "connection before closing it",
             SESSION_VAR(net_wait_timeout),
             CMD_LINE(REQUIRED_ARG),
             VALID_RANGE(1, IF_WIN(INT_MAX32/1000, LONG_TIMEOUT)),
             DEFAULT(NET_WAIT_TIMEOUT), BLOCK_SIZE(1));
      

    3 interactive_timeout覆盖wait_timeout

    这个操作只会在用户登陆的时候才出现.其覆盖操作定义在函数server_mpvio_update_thd中,如下:

    server_mpvio_update_thd(THD *thd, MPVIO_EXT *mpvio) do_command
    {
      thd->max_client_packet_length = mpvio->max_client_packet_length;
      if (mpvio->protocol->has_client_capability(CLIENT_INTERACTIVE)) //这里做判断
        thd->variables.net_wait_timeout = thd->variables.net_interactive_timeout;//这里覆盖
    

    这里我们可以明确看到有覆盖操作,并且我们也能看到这里的if条件是如果是CLIENT_INTERACTIVE 类型的客户端连接才会做覆盖。

    这段代码是用户登录中的一段。那么得出一个结论: 只有在用户登录时,同时Client类型是CLIENT_INTERACTIVE类型时,才会用 interactive_timeout覆盖掉参数wait_timeout,其他任何情况都不会出现覆盖。

    4 总结

    • interactive_timeout对交互式客户端连接生效,wait_timeout对非交互式客户端连接生效。
    • 一旦会话登陆成功如果想要会话级别修改超时参数,不管交互式还是非交互式都是修改wait_timeout(set wait_timeout)参数才会生效。
    • 只有在新建立连接时,interactive_timeout 才有可能覆盖 wait_timeout的值,同时也只有 新建连接时,interactive_timeout才有用。其他任何情况,控制空闲连接超时的都是wait_timeout。

    Author: halberd.lee

    Created: 2019-09-26 Thu 21:55

    Validate

  • 相关阅读:
    使用Myeclipse + SVN + TaoCode 免费实现项目版本控制的详细教程
    国内的代码托管服务
    国内可用的SVN和Git代码托管网站汇总
    需求调研与分析流程
    如何做好新项目的需求调研?(一)
    如何进行有效的需求调研
    weblogic和tomcat
    同步变量也是变量
    并发编程的三个管理
    机器学习
  • 原文地址:https://www.cnblogs.com/halberd-lee/p/11594770.html
Copyright © 2020-2023  润新知