博客專(zhuān)欄

EEPW首頁(yè) > 博客 > Mysql 連接數(shù),最大并發(fā)數(shù)設(shè)置

Mysql 連接數(shù),最大并發(fā)數(shù)設(shè)置

發(fā)布人:lantu 時(shí)間:2021-11-18 來(lái)源:工程師 發(fā)布文章

項(xiàng)目中可能會(huì)遇到MySQL: ERROR 1040: Too many connections”的異常情況,造成這種情況的一種原因是訪(fǎng)問(wèn)量過(guò)高,MySQL服務(wù)器抗不住,這個(gè)時(shí)候就要考慮增加從服務(wù)器分散讀壓力;另一種原因就是MySQL配置文件中max_connections值過(guò)小。
首先,首先我們來(lái)看下mysql的最大連接數(shù):

show variables like '%max_connections%';

如果服務(wù)器的并發(fā)連接請(qǐng)求量比較大,建議調(diào)高此值,以增加并行連接數(shù)量,當(dāng)然這建立在機(jī)器能支撐的情況下,因?yàn)槿绻B接數(shù)越多,介于MySQL會(huì)為每個(gè)連接提供連接緩沖區(qū),

就會(huì)開(kāi)銷(xiāo)越多的內(nèi)存,所以要適當(dāng)調(diào)整該值,不能盲目提高設(shè)值。

數(shù)值過(guò)小會(huì)經(jīng)常出現(xiàn)ERROR 1040: Too many connections錯(cuò)誤,可以過(guò)

show global status like 'Max_used_connections';

通配符查看當(dāng)前狀態(tài)的連接數(shù)量,以定奪該值的大小。

以看到服務(wù)器響應(yīng)的最大連接數(shù)為3,遠(yuǎn)遠(yuǎn)低于mysql服務(wù)器允許的最大連接數(shù)值。

對(duì)于mysql服務(wù)器最大連接數(shù)值的設(shè)置范圍比較理想的是:服務(wù)器響應(yīng)的最大連接數(shù)值占服務(wù)器上限連接數(shù)值的比例值在10%以上,如果在10%以下,說(shuō)明mysql服務(wù)器最大連接上限值設(shè)置過(guò)高.

Max_used_connections / max_connections * 100% = 3/512 *100% ≈ 0.0058%

我們可以看到占比遠(yuǎn)低于10%(因?yàn)檫@是本地監(jiān)控測(cè)試服務(wù)器,結(jié)果值沒(méi)有太大的參考意義,大家可以根據(jù)實(shí)際情況設(shè)置連接數(shù)的上限值)。

max_used_connections / max_connections * 100% (理想值≈ 85%)

如果max_used_connections跟max_connections相同 那么就是max_connections設(shè)置過(guò)低或者超過(guò)服務(wù)器負(fù)載上限了,低于10%則設(shè)置過(guò)大。

MySQL的max_connections參數(shù)用來(lái)設(shè)置最大連接(用戶(hù))數(shù)。每個(gè)連接MySQL的用戶(hù)均算作一個(gè)連接。

MySQL無(wú)論如何都會(huì)保留一個(gè)用于管理員(SUPER)登錄的連接,用于管理員連接數(shù)據(jù)庫(kù)進(jìn)行維護(hù)操作,即使當(dāng)前連接數(shù)已經(jīng)達(dá)到了max_connections。因此MySQL的實(shí)際最大可連接數(shù)為max_connections+1;
這個(gè)參數(shù)實(shí)際起作用的最大值(實(shí)際最大可連接數(shù))為16384,即該參數(shù)最大值不能超過(guò)16384,即使超過(guò)也以16384為準(zhǔn);
增加max_connections參數(shù)的值,不會(huì)占用太多系統(tǒng)資源。系統(tǒng)資源(CPU、內(nèi)存)的占用主要取決于查詢(xún)的密度、效率等;
該參數(shù)設(shè)置過(guò)小的最明顯特征是出現(xiàn)”Too many connections”錯(cuò)誤;

設(shè)置這個(gè)最大連接數(shù)值

方法1:

set GLOBAL max_connections=1024;
show variables like '%max_connections%';

這種 方式在Mysql重啟后就失效。

方法2:

修改mysql配置文件my.cnf,在[mysqld]段中添加或修改max_connections值:
max_connections=512

重啟mysql服務(wù)即可。

總體來(lái)說(shuō),該參數(shù)在服務(wù)器資源夠用的情況下應(yīng)該盡量設(shè)置大,以滿(mǎn)足多個(gè)客戶(hù)端同時(shí)連接的需求。否則將會(huì)出現(xiàn)類(lèi)似”Too many connections”的錯(cuò)誤。


無(wú)論從事什么行業(yè),只要做好兩件事就夠了,一個(gè)是你的專(zhuān)業(yè)、一個(gè)是你的人品,專(zhuān)業(yè)決定了你的存在,人品決定了你的人脈,剩下的就是堅(jiān)持,用善良專(zhuān)業(yè)和真誠(chéng)贏(yíng)取更多的信任。


*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。



關(guān)鍵詞: mysql

相關(guān)推薦

技術(shù)專(zhuān)區(qū)

關(guān)閉