mysql连接数thread_MySQL数据库负载很高连接数很多怎么处理
MySQL數(shù)據(jù)庫負(fù)載很高連接數(shù)很多怎么處理
在MySQL數(shù)據(jù)庫連接數(shù)很多,而且大多屬于活躍的狀態(tài)時(shí)MySQL機(jī)器基本上負(fù)載很高,屬于基本上快要死去的狀態(tài)了.
這時(shí)怎么辦呢?
一、可能有兩個(gè)辦法:
方法一、先限制Innodb的并發(fā)處理.
如果 innodb_thread_concurrency = 0 可以先改成 16或是64 看機(jī)器壓力,如果非常大,先改成16讓機(jī)器的壓力下來,然后慢慢增達(dá),適應(yīng)自已的業(yè)務(wù).
處理方法:
set global innodb_thread_concurrency=16;
方法二、 限制但用戶的連接數(shù)
對于連接數(shù)已經(jīng)超過600或是更多的情況,可以考慮適當(dāng)?shù)南拗埔幌逻B接數(shù),讓前端報(bào)一下錯(cuò),也別讓DB掛了.
只要DB在,總是可以用來加載一下數(shù)據(jù),當(dāng)數(shù)據(jù)加載到了nosql里了,慢慢的DB壓力也會(huì)降下來的.
限制單用戶連接數(shù)在500以下. 如:
set global max_user_connections=500;
(MySQL隨著連接數(shù)的增加性能會(huì)是下降的,這也是thread_pool出現(xiàn)的原因)
二、額外關(guān)注點(diǎn)
另外對于有的監(jiān)控程序會(huì)讀取 information_schema下面的表數(shù)據(jù),可以考慮關(guān)閉參數(shù) innodb_stats_on_metadata=0
set global innodb_stats_on_metadata=0;
這個(gè)參數(shù)主要防止對 information_schema 讀取時(shí)造成大量讀取磁盤進(jìn)行信息統(tǒng)計(jì)(如果慢查詢中出現(xiàn)關(guān)于information_schema中表時(shí),也可以考慮禁用該參數(shù))
三、原理通俗理解
當(dāng)學(xué)校的一個(gè)食堂一分鐘只能為兩個(gè)人打飯, 忽然來了100個(gè)人來打飯而且又沒排隊(duì),這就會(huì)出現(xiàn)打飯的師傅要用點(diǎn)時(shí)間去選擇為那個(gè)用戶服務(wù)了,
人越多場面就越亂, 難免出現(xiàn)用戶大吼"該我打飯"的場面, 最后有可能就出現(xiàn),不是打飯而是相互之間打架了。打飯的師傅也將收到同時(shí)有90個(gè)以上
的Server too busy. 如果能排一下隊(duì)最多也就50分鐘能處理完了.
以上辦法,應(yīng)該可以讓MySQLD不會(huì)掛掉.如果業(yè)務(wù)支撐受到限制,還是想辦法處理一下.
問題:
高峰期的業(yè)務(wù)支撐數(shù)就是服務(wù)器的最終需求數(shù)嗎?
完畢!
總結(jié)
以上是生活随笔為你收集整理的mysql连接数thread_MySQL数据库负载很高连接数很多怎么处理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql修改网络服务_MySql-Se
- 下一篇: plsql连接mysql_使用PLSQL