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

2021-08-27 20:27:56 字數 2751 閱讀 3124

mysql連線數過大導致連線超時的問題,春節訪問量激增,負載壓力很大,程式處理較慢,然後就調整專案中的執行緒池和資料庫連線數。可是還是沒有太好的提高,追根溯源,發現資料庫連線受到限制。雖然是做了讀寫分離,但是還是沒抗住高峰。所以會有報錯:「mysql: error 1040: too many connections」。

檢視最大連線數上限,預設的是151?

mysql> show variableslike'max_connections';

+-----------------+-------+

| variable_name   | value |

+-----------------+-------+

| max_connections | 151   |

+-----------------+-------+

檢視mysql最大使用連線數?

mysql> showglobalstatuslike'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>setglobalmax_connections=1500;

query ok, 0rowsaffected (0.00 sec)

mysql> show variableslike'max_connections';

+-----------------+-------+

| variable_name   | value |

+-----------------+-------+

| max_connections | 1500|

+-----------------+-------+

1 rowinset(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小時)?

mysql>setglobalwait_timeout=30;

mysql>setwait_timeout=30;

wait_timeout過大有弊端,其體現就是mysql裡大量的sleep程序無法及時釋放,拖累系統效能,不過也不能把這個指設定的過小,否則你可 能會遭遇到「mysql has gone away」之類的問題。

Mysql 連線數過大或常常連線超時的排錯方法

進入資料庫安裝的linux,進入mysql mysql uroot進入mysql 檢視設定的最大連線數 show variables like max connections 檢視使用的量,實時統計 show global status like max used connections 修改最大連...

mysql連線數過多

如果您得到 too many connections 錯誤資訊,並且想要了解正在發生的情況,本語句是非常有用的。mysql保留乙個額外的連線,讓擁有super許可權的 賬戶使用,以確保管理員能夠隨時連線和檢查系統 假設您沒有把此許可權給予所有的使用者 show processlist檢視連線數目 k...

MYSQL連線數過大瞬間斷開的解決辦法

經常出現瞬間連不上mysql資料庫的情況,查了大量資料,發現是微軟的乙個補丁引起的,即 kb967723 在新增刪除程式裡解除安裝掉,重啟伺服器即可!解決辦法 開啟登錄檔 hkey local machine system currentcontrolset services tcpip param...