mysql> show variables like '%timeout%';
wait_timeout — 指的是mysql在關閉一個非交互的連接之前所要等待的秒數,其取值范圍為1-2147483(Windows),1-31536000(linux),默認值28800。
interactive_time — 指的是mysql在關閉一個交互的連接之前所要等待的秒數(交互連接如mysql gui tool中的連接),其取值范圍隨wait_timeout變動,默認值28800。
比如我們在終端上進入mysql管理,使用的即使交互的連接,這時候,如果沒有操作的時間草果了interactive_time設置的時間就會自 動斷開。當然我們可以在mysql_real_connect()中使用CLIENT_INTERACTIVE來設置位交互連接模式。
MySQL的配置中,有一個叫做“wait_timeout"的參數,這個參數大致的意思是這樣:當一個客戶端連接到MySQL數據庫后,如果客戶端不自己斷開,也不做任何操作,MySQL數據庫會將這個連接保留"wait_timeout"這么長時間(單位是s,默認是28800s,也就是8小時),超過這個時間之后,MySQL數據庫為了節省資源,就會在數據庫端斷開這個連接;當然,在此過程中,如果客戶端在這個連接上有任意的操作,MySQL數據庫都會重新開始計算這個時間。
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小時)
MySQL服務器所支持的最大連接數是有上限的,因為每個連接的建立都會消耗內存,因此我們希望客戶端在連接到MySQL Server處理完相應的操作后,應該斷開連接並釋放占用的內存。如果你的MySQL Server有大量的閑置連接,他們不僅會白白消耗內存,而且如果連接一直在累加而不斷開,最終肯定會達到MySQL Server的連接上限數,這會報'too many connections'的錯誤。對於wait_timeout的值設定,應該根據系統的運行情況來判斷。在系統運行一段時間后,可以通過show processlist命令查看當前系統的連接狀態,如果發現有大量的sleep狀態的連接進程,則說明該參數設置的過大,可以進行適當的調整小些。
問題:
如果在配置文件my.cnf中只設置參數wait_timeout=100,則重啟服務器后進入,執行:
Mysql> show variables like “%timeout%”;
會發現參數設置並未生效,仍然為28800(即默認的8個小時)。
查詢資料后,要同時設置interactive_timeout和wait_timeout才會生效。
【mysqld】
wait_timeout=100
interactive_timeout=100
重啟MySQL Server進入后,查看設置已經生效。
問題1:這里為什么要同時設置interactive_timeout,wait_timeout的設置才會生效?
問題2:interactive的值如果設置的和wait_timeout不同,為什么Interactive_timeout會覆蓋wait_timeout?
問題3:在進行MySQL優化時,因為interactive_timeout決定的是交互連接的時間長短,而wait_timeout決定的是非交互連接的時間長短。如果在進行連接配置時mysql_real_connect()最后一個參數client_flag不設置為CLIENT_INTERACTIVE,是不是interactive_timeout的值不會覆蓋wait_timeout?
問題4:為了減少長連接的數量,在設置優化時是不是可以將interactive_timeout的值設置的大些,而wait_timeout的值設置的小些?但是問題2的描述好像又不允許這樣。。。