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參數控制】