涉及到的參數:
max_connections | 1024 |
max_user_connections | 1000 |
wait_timeout | 100 |
連接配接數是直接反應資料庫性能好壞的關鍵名額。可能的原因包括:
(1)sql查詢堵死,造成後面的DML操作等待;
(2)增删改查操作頻繁,磁盤IO遇到瓶頸,導緻無法處理繁忙請求等。
如果出現too manyconnections,直接增大max_connections值得同時,一般設定為500-1000,在大多數情況下就可以了,但是如果繼續增加,比如增加為10000,就是治标不治本。因為連接配接數增大,會導緻每個連接配接所占用的記憶體也增加,這樣機器很容易因記憶體不足而當機。
mysql>show variables like '%connections%';
+----------------------+-------+
|Variable_name | Value |
|max_connections | 151 |
|max_user_connections | 0 |
2 rows inset (0.00 sec)
在處理完一條請求後,會根據wait_timeout(伺服器關閉非互動連接配接之前等待活動的秒數)的值來釋放連接配接,一般設定為100s即可。如果沒有設定,采用預設的28800s,即8h,用戶端連接配接到mysql伺服器處理完相應的操作後,要等待8h才會釋放記憶體,如果資料庫伺服器有大量的閑置連接配接,不僅會白白消耗記憶體,如果連接配接一直累加而不斷開,最終會達到mysql連接配接的上限數,就會報這個錯誤。
mysql>show variables like 'wait_timeout%';
+---------------+-------+
|Variable_name | Value |
|wait_timeout | 28800 |
1 row inset (0.00 sec)