Mysql連接數過大導致連接超時的問題

春節訪問量激增,負載壓力很大,程序處理較慢,然後就調整項目中的線程池和數據庫連接數。可是還是沒有太好的提高,追根溯源,發現數據庫連接受到限制。雖然是做了讀寫分離,但是還是沒抗住高峯。所以會有報錯:“MySQL: ERROR 1040: Too many connections”。

查看最大連接數上限,默認的是151

mysql> show variables like 'max_connections';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 151   |
+-----------------+-------+

查看mysql最大使用連接數

mysql> show global status like 'Max_used_connections';
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| Max_used_connections | 152   |
+----------------------+-------+

可以看出,已經超過了連接數上限。而且還多了一個,這是爲什麼呢?原來MySQL無論如何都會保留一個用於管理員(SUPER)登陸的連接,用於管理員連接數據庫進行維護操作,即使當前連接數已經達到了max_connections。因此MySQL的實際最大可連接數爲max_connections+1;
這個參數實際起作用的最大值(實際最大可連接數)爲16384,即該參數最大值不能超過16384,即使超過也以16384爲準;
增加max_connections參數的值,不會佔用太多系統資源。系統資源(CPU、內存)的佔用主要取決於查詢的密度、效率等;

解決方法:
提高數據庫最大連接數:
1、直接設置,不需要重啓:

mysql> set global max_connections=1500;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'max_connections';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 1500|
+-----------------+-------+
1 row in set (0.00 sec)

2、配置文件設置,需要重啓:
修改my.cnf文件,在[mysqld]下面添加語句:

max_connections=1500

數值大小,根據併發情況調整,Max_used_connections/max_connections<90%就可以。
光靠上面的設置,還不夠。執行show processlist查看執行任務,你會發現很多連接長時間在sleep。如果不是高峯期,這些連接也會消耗CPU和內存。這個需要通過程序設置最大超時時間wait_timeout和interactive_timeout。

(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> set global wait_timeout=30;
mysql> set wait_timeout=30;

wait_timeout過大有弊端,其體現就是MySQL裏大量的SLEEP進程無法及時釋放,拖累系統性能。不過也不能把這個值設置的過小,否則你可能會遭遇到“MySQL has gone away”之類的問題。

參考博文

http://www.jb51.net/article/51829.htm
http://www.cnblogs.com/jiunadianshi/articles/2388871.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章