wait_timeout 和 interactive_timeout

wait_timeout 和 interactive_timeout

1 参数说明

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

interactive_timeout:对于交互式客户端建立的链接, MySQL容许的最大空闲时间html

wait_timeout: 非交互式客户端建立的链接,MySQL容许的最大空闲时间。java

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

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

2 原代码

  • interactive_timeoutsql

    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_timeoutshell

    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中,以下:sass

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 类型的客户端链接才会作覆盖。ruby

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

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

相关文章
相关标签/搜索