MySQL中的配置參數interactive_timeout和wait_timeout(可能致使過多sleep進程的兩個參數)

mysql> show variables like '%timeout%'; node

 

wait_timeout — 指的是mysql在關閉一個非交互的鏈接以前所要等待的秒數,其取值範圍爲1-2147483(Windows),1-31536000(linux),默認值28800。mysql

interactive_time — 指的是mysql在關閉一個交互的鏈接以前所要等待的秒數(交互鏈接如mysql gui tool中的鏈接),其取值範圍隨wait_timeout變更,默認值28800。linux

好比咱們在終端上進入mysql管理,使用的即便交互的鏈接,這時候,若是沒有操做的時間草果了interactive_time設置的時間就會自 動斷開。固然咱們能夠在mysql_real_connect()中使用CLIENT_INTERACTIVE來設置位交互鏈接模式。sql

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的描述好像又不容許這樣。。。優化

相關文章
相關標籤/搜索