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

相關文章
相關標籤/搜索