mysql wait_timeout和interactive_timeout總結

  • 2019 年 10 月 5 日
  • 筆記

轉載自:http://blog.csdn.net/z1988316/article/details/7976038

# 交互式: mysql -uxx -pxx 

# 非交互式:mysql -uxx -pxx -e 'xxx'

(1)interactive_timeout:

參數含義:服務器關閉交互式連接前等待活動的秒數。交互式客戶端定義為在mysql_real_connect()中使用CLIENT_INTERACTIVE選項的客戶端。

參數默認值:28800秒(8小時)

(2)wait_timeout:

參數含義:服務器關閉非交互連接之前等待活動的秒數。

在線程啟動時,根據全局wait_timeout值或全局interactive_timeout值初始化會話wait_timeout值,取決於客戶端類型(由mysql_real_connect()的連接選項CLIENT_INTERACTIVE定義)。

參數默認值:28800秒(8小時)

問題1:這裡為什麼要同時設置interactive_timeout,wait_timeout的設置才會生效?

答:    不設置interactive_timeout,wait_timeout也會生效。

問題2:interactive的值如果設置的和wait_timeout不同,為什麼Interactive_timeout會覆蓋wait_timeout?

答:在交互模式下(CLIENT_INTERACTIVE,例如mysql -uxx -pxx這種),interactive_timeout才生效。

  非交互模式下(如使用navicat和sqlyog或mysql -e''這種寫法),interactive_timeout不生效

問題3:在進行MySQL優化時,因為interactive_timeout決定的是交互連接的時間長短,而wait_timeout決定的是非交互連接的時間長短。如果在進行連接配置時mysql_real_connect()最後一個參數client_flag不設置為CLIENT_INTERACTIVE,是不是interactive_timeout的值不會覆蓋wait_timeout?

答:可以做實驗試試。

問題4:為了減少長連接的數量,在設置優化時是不是可以將interactive_timeout的值設置的大些,而wait_timeout的值設置的小些?但是問題2的描述好像又不允許這樣。。。

答:如2所述,在交互模式下,interactive_timeout取代wait_timeout。這樣,如果有的客戶端是交互模式方式連接mysql server。那麼客戶端的timeout受制於interactive_timeout。

如果有的客戶端是非交互模式,長連接mysql server。那麼客戶端的timeout受制於wait_timeout。(是否是交互模式的連接,由客戶端決定)

【據此結論實驗發現navicat和sqlyog都是運行在非交互模式,超時實際上受wait_timeout參數控制】