MySQL數據庫負載很高連接數很多怎麼處理

MySQL數據庫負載很高連接數很多怎麼處理

轉自:http://wubx.net/how-to-mysql-load-veryhigh/

在MySQL數據庫連接數很多,而且大多屬於活躍的狀態時MySQL機器基本上負載很高,屬於基本上快要死去的狀態了.
這時怎麼辦呢?

一、可能有兩個辦法:

方法一、先限制Innodb的併發處理.

如果 innodb_thread_concurrency = 0 可以先改成 16或是64 看機器壓力,如果非常大,先改成16讓機器的壓力下來,然後慢慢增達,適應自已的業務.
處理方法:

set global innodb_thread_concurrency=16;

方法二、 限制但用戶的連接數

對於連接數已經超過600或是更多的情況,可以考慮適當的限制一下連接數,讓前端報一下錯,也別讓DB掛了.
只要DB在,總是可以用來加載一下數據,當數據加載到了nosql裏了,慢慢的DB壓力也會降下來的.
限制單用戶連接數在500以下. 如:

set global max_user_connections=500;

(MySQL隨着連接數的增加性能會是下降的,這也是thread_pool出現的原因)

二、額外關注點

另外對於有的監控程序會讀取 information_schema下面的表數據,可以考慮關閉參數 innodb_stats_on_metadata=0

set global innodb_stats_on_metadata=0;

這個參數主要防止對 information_schema 讀取時造成大量讀取磁盤進行信息統計(如果慢查詢中出現關於information_schema中表時,也可以考慮禁用該參數)

三、原理通俗理解

當學校的一個食堂一分鐘只能爲兩個人打飯, 忽然來了100個人來打飯而且又沒排隊,這就會出現打飯的師傅要用點時間去選擇爲那個用戶服務了,
人越多場面就越亂, 難免出現用戶大吼"該我打飯"的場面, 最後有可能就出現,不是打飯而是相互之間打架了。打飯的師傅也將收到同時有90個以上
的Server too busy. 如果能排一下隊最多也就50分鐘能處理完了.

以上辦法,應該可以讓MySQLD不會掛掉.如果業務支撐受到限制,還是想辦法處理一下.

問題:
高峯期的業務支撐數就是服務器的最終需求數嗎?

完畢!

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