溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Mysql Too many connections解決方案

發(fā)布時(shí)間:2020-08-15 17:48:42 來(lái)源:網(wǎng)絡(luò) 閱讀:1923 作者:hgditren 欄目:MySQL數(shù)據(jù)庫(kù)

Too many connections
從字面理解,mysql連接數(shù)過(guò)多。當(dāng)連接數(shù)量過(guò)多,且來(lái)不及釋放時(shí)便會(huì)出現(xiàn)此錯(cuò)誤。

查看mysql當(dāng)前連接信息,特別要注意sleep休眠狀態(tài)的連接。

show full processlist;

Command 狀態(tài):

  • SLEEP
    線程正在等待客戶端發(fā)送新的請(qǐng)求。
    1. QUERY
      線程正在執(zhí)行查詢或者正在將結(jié)果發(fā)送給客戶端?!?/li>
  • LOCKED
    在MYSQL服務(wù)層,該線程正在等待表鎖。在存儲(chǔ)引擎級(jí)別實(shí)現(xiàn)的鎖,如INNODB的行鎖,并不會(huì)體現(xiàn)在線程狀態(tài)中。對(duì)于MYISAM來(lái)說(shuō)這是一個(gè)比較典型的狀態(tài)。但在其他沒(méi)有行鎖的引擎中也經(jīng)常會(huì)出現(xiàn)。ANALYZING AND STATISTICS 線程正在收集存儲(chǔ)引擎的統(tǒng)計(jì)信息,并生成查詢的執(zhí)行計(jì)劃。
  • COPYING TO TMP TABLE (ON DISK)
    線程正在執(zhí)行查詢,并且將其結(jié)果集都復(fù)制到一個(gè)臨時(shí)文件中,這種狀態(tài)一般要么是在做GROUP BY操作,要么是文件排序操作,或者是UNION操作。如果這個(gè)狀態(tài)后面還有ON DISK的標(biāo),那表示MYSQL正在將一個(gè)內(nèi)存臨時(shí)表放到磁盤(pán)上。
  • SORTING RESULT
    線程正在對(duì)結(jié)果集進(jìn)行排序。
  • SENDING DATA
    線程可能在多個(gè)狀態(tài)之間傳送數(shù)據(jù),或者生成結(jié)果集,或者在向客戶端返回?cái)?shù)據(jù)。

查看mysql設(shè)置的最大連接數(shù)

show global variables like 'max_connections';

服務(wù)器響應(yīng)的最大連接數(shù)

show global variables like 'max_user_connections';

建議:服務(wù)器響應(yīng)的最大連接數(shù)值占服務(wù)器上限連接數(shù)值的比例值在10%以上,如果在10%以下,說(shuō)明mysql服務(wù)器最大連接上限值設(shè)置過(guò)高。

max_user_connections/max_connections * 100% >=10%

如果最大連接數(shù)量沒(méi)問(wèn)題,而sleep休眠狀態(tài)的連接過(guò)多,則應(yīng)該從兩方面注意:

  • 1。 wait_timeout 空閑等待超時(shí)時(shí)間
  • 2。 interactive_timeout 交互超時(shí)時(shí)間(通過(guò)mysql客戶端連接數(shù)據(jù)庫(kù)是交互式連接)

需要主題:wait_timeout設(shè)置過(guò)大有弊端,其體現(xiàn)就是MySQL里大量的SLEEP進(jìn)程無(wú)法及時(shí)釋放,拖累系統(tǒng)性能。如果設(shè)置過(guò)小,可能會(huì)遭遇到“MySQL has gone away”之類(lèi)的問(wèn)題。

要想從根本上解決sleep過(guò)多的問(wèn)題,需從以下面三點(diǎn)排查:

  • 1。程序連接mysql,不使用持久鏈接。即使用mysqli_connect而不是pconnect。
  • 2。程序執(zhí)行結(jié)束,主動(dòng)顯式調(diào)用mysqli_close來(lái)釋放連接資源。
  • 3。解決程序中的SQL慢查詢語(yǔ)句。

最后快速解決過(guò)程

set GLOBAL max_connections = 500;
set GLOBAL wait_timeout = 300;
set GLOBAL interactive_timeout = 600;
向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI