)MySQL裡的wait_timeout

來源:互聯網
上載者:User
如果你沒有修改過MySQL的配置,預設情況下,wait_timeout的初始值是28800。

wait_timeout過大有弊端,其體現就是MySQL裡大量的SLEEP進程無法及時釋放,拖累系統效能,不過也不能把這個指設定的過小,否則你可能會遭遇到“MySQL has gone away”之類的問題,通常來說,我覺得把wait_timeout設定為10是個不錯的選擇,但某些情況下可能也會出問題,比如說有一個CRON指令碼,其中兩次SQL查詢的間隔時間大於10秒的話,那麼這個設定就有問題了(當然,這也不是不能解決的問題,你可以在程式裡時不時mysql_ping一下,以便伺服器知道你還活著,重新計算wait_timeout時間):

# vi /etc/my.cnf

[mysqld]
wait_timeout=10

# /etc/init.d/mysql restart

不過這個方法太生硬了,線上服務重啟無論如何都應該儘可能避免,看看如何在MySQL命令列裡通過SET來設定:

mysql> set global wait_timeout=10;

mysql> show global variables like 'wait_timeout';
+----------------------------+-------+
| Variable_name              | Value |
+----------------------------+-------+
| wait_timeout               | 10    |
+----------------------------+-------+

這裡一個容易把人搞蒙的地方是如果查詢時使用的是show variables的話,會發現設定好像並沒有生效,這是因為單純使用show variables的話就等同於使用的是show session variables,查詢的是會話變數,只有使用show global variables,查詢的才是全域變數。

網路上很多人都抱怨說他們set global之後使用show variables查詢沒有發現改變,原因就在於混淆了會話變數和全域變數,如果僅僅想修改會話變數的話,可以使用類似set wait_timeout=10;或者set session wait_timeout=10;這樣的文法。

另一個值得注意的是會話變數wait_timeout初始化的問題,這一點在手冊裡已經明確指出了,我就直接拷貝了:

On thread startup, the session wait_timeout value is initialized from the global wait_timeout value or from the global interactive_timeout value, depending on the type of client (as defined by the CLIENT_INTERACTIVE connect option to mysql_real_connect()).

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.