您好,很高興為您解答。
我們提供的服務有:成都網(wǎng)站建設、成都網(wǎng)站制作、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、云夢ssl等。為上千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術的云夢網(wǎng)站制作公司
第一先限制Innodb的并發(fā)處理.如果innodb_thread_concurrency = 0 可以先改成 16或是64 看機器壓力,如果
非常大,先改成16讓機器的壓力下來,然后慢慢增達,適應自已的業(yè)務.
處理方法: set global innodb_thread_concurrency=16;
第二: 對于連接數(shù)已經(jīng)超過600或是更多的情況,可以考慮適當?shù)南拗埔幌逻B接數(shù),讓前端報一下錯,也別讓DB掛了.
DB在了,總是可以用來加載一下數(shù)據(jù),當數(shù)據(jù)加載到了nosql里了,慢慢的DB壓力也會降下來的.
限制單用戶連接數(shù)在500以下. 如:
set global max_user_connections=500;
(MySQL隨著連接數(shù)的增加性能會是下降的,這也是thread_pool出現(xiàn)的原因)
另外對于有的監(jiān)控程序會讀取information_schema下面的表的程序可以考慮關閉下面的參數(shù)
innodb_stats_on_metadata=0
set global innodb_stats_on_metadata=0;
這個參數(shù)主要防止對讀取information_schema時造成大量讀取磁盤進行信息統(tǒng)計(如果慢查詢中出現(xiàn)關于information_schema中表時,也可以考慮禁用該參數(shù))
處理依據(jù):
當學校的一個食堂一分鐘只能為兩個打飯, 忽然來了100個時人來打飯,又沒排隊, 不出會現(xiàn)了打飯的師傅要用點時間
去選擇為那個用戶服務了, 人越多,場面就越亂, 難免出現(xiàn)用戶大吼該他的場面, 最后有可能就出現(xiàn)不是打飯了,而時之間相互
打架了,打飯的師傅也將收到同時有90個以上的Server too busy. 如果能排一下隊.最多也就50分鐘能處理完了.
以前辦法,應該可以讓MySQLD不會掛掉.如果業(yè)務支撐受到限制,還是想辦法處理一下.
如若滿意,請點擊右側【采納答案】,如若還有問題,請點擊【追問】
希望我的回答對您有所幫助,望采納!
~ O(∩_∩)O~
錯誤“Too many connections”。平常碰到這個問題,我基本上是修改/etc/my.cnf的max_connections參數(shù),然后重啟數(shù)據(jù)庫。但
是生產(chǎn)服務器上數(shù)據(jù)庫又不能隨便重啟。
沒辦法,只好想辦法手動去釋放一些沒用的連接。
登陸到MySQL的提示符下,數(shù)據(jù)show processlist這個命令,可以得到所以連接到這個服務器上的MySQL連接:
mysql show processlist;
+---------+------+---------------------+---------+---------+------+-------+-------------------+
| Id | User | Host | db | Command | Time | State | Info |
+---------+------+---------------------+---------+---------+------+-------+-------------------+
| 1180421 | ur | 202.103.96.68:49754 | test1 | Sleep | 1 | | NULL |
| 1180427 | ur | 202.103.96.68:55079 | test2 | Sleep | 1 | | NULL |
| 1180429 | ur | 202.103.96.68:55187 | testdba | Sleep | 0 | | NULL |
| 1180431 | ur | 202.103.96.68:55704 | testdba | Sleep | 0 | | NULL |
| 1180437 | ur | 202.103.96.68:32825 | test1 | Sleep | 1 | | NULL |
| 1180469 | ur | 202.103.96.68:58073 | testdba | Sleep | 0 | | NULL |
| 1180472 | ur | 83.136.93.131:47613 | test2 | Sleep | 8 | | NULL |
| 1180475 | root | localhost | NULL | Query | 0 | NULL | show PROCESSLIST |
+---------+------+---------------------+---------+---------+------+-------+-------------------+
8 rows in set (0.00 sec)
mysql
然后,你可以看到像上面這樣的MySQL數(shù)據(jù)連接列表,而且每一個都會有一個進程ID號(在上表的第一列)。我們只要輸入這樣的命令:
mysql kill 1180421;
Query OK, 0 rows affected (0.00 sec)
mysql
其中1180421為你在進程列表里找到并且要殺掉的進程號。
產(chǎn)生這種問題的原因是:
連接數(shù)超過了 MySQL 設置的值,與 max_connections 和 wait_timeout 都有關系。wait_timeout 的值越大,連接的空閑等待就越長,這樣就會造成當前連接數(shù)越大。
解決方法:
修改MySQL配置文件/etc/my.cnf,設置成max_connections=1000,wait_timeout=5。如果沒有此項設置可以自行添加,修改后重啟MySQL服務即可。要不經(jīng)常性報此錯誤,則要對服務器作整體性能優(yōu)化
注:
為了防止發(fā)生too many connections時候無法登錄的問題,mysql manual有如下的說明:
mysqld actually allows max_connections+1 clients to connect. The extra connection is reserved for use by accounts that have the SUPER privilege. By granting the SUPER privilege to administrators and not to normal users (who should not need it), an administrator can connect to the server and use SHOW PROCESSLIST to diagnose problems even if the maximum number of unprivileged clients are connected.
因此, 必須只賦予root用戶的SUPER權限,同時所有數(shù)據(jù)庫連接的帳戶不能賦予SUPER權限。前面說到的報錯后無法登錄就是由于我們的應用程序直接配置的root用戶
總結,解決問題的最終方法:
1.修改配置文件/etc/my.cnf,調(diào)整連接參數(shù)
2.檢查程序代碼,對于沒有關閉的鏈接及時進行關閉
max_user_connections 是 MySQL 用戶連接數(shù)的最大值設置,整段語句的意思是:服務器的 MySQL
的最大連接數(shù)參數(shù)設置不足。解決方法:修改 MySQL 安裝目錄下 my.ini 或者 my.cnf 文件內(nèi)的
max_user_connections 參數(shù)的數(shù)值,重啟 MySQL 服務器。
但是正常來說,MySQL默認的100個連接數(shù)是足夠的。我們需要從程序上去考慮。MySQL的默認最大連接數(shù)為100(N),實際給普通
用戶使用只有N-1個,保留一個連接是留給超級管理員使用的,防止連接占滿了不會把管理員也踢出來。很多網(wǎng)站在運行的時候都會出現(xiàn)連接數(shù)受限現(xiàn)象,我認為
十之八九并非是網(wǎng)站的真實訪問量太大導致連接數(shù)超標,更多是因為我們在設計網(wǎng)站程序的時候采用了不合理的設計架構或數(shù)據(jù)結構引起的。非正常連接超限可能原
因如下(天緣即時歸納未必完整或無錯訛僅供參考):
類似人數(shù)、在線時間、瀏覽數(shù)等統(tǒng)計功能與主程序數(shù)據(jù)庫同屬一個數(shù)據(jù)空間時就很容易出現(xiàn)。
復雜的動態(tài)頁尤其是用戶每次瀏覽都涉及到多數(shù)據(jù)庫或多表操作時候也很容易出現(xiàn)。
還有就是程序設計的不合理(比如復雜運算、等待等操作放置在數(shù)據(jù)庫交互行為中間進行),或者程序存在釋放BUG。
計算機硬件配置太低卻安裝太高版、太高配置的MySQL。
未采用緩存技術。
數(shù)據(jù)庫未經(jīng)過優(yōu)化或表格設計及其復雜。
等等一些原因,都會延長數(shù)據(jù)庫的數(shù)據(jù)交互時間或增加交互次數(shù)。所以,如果大家遇到這類問題,首先要考慮程序是否存在BUG導致連接釋放失敗,
再次就是考慮優(yōu)化軟硬件。當然修改MySQL連接數(shù)也是軟件優(yōu)化的操作方法之一,希望大家都能夠本著學習的態(tài)度通過研究一下自身的原因從而解決這一問題。
如果實在是找不到原因,那就只好先修改連接數(shù),暫緩定位真實原因了。
1、mysql數(shù)據(jù)庫系統(tǒng)允許的最大可連接數(shù)max_connections。這個參數(shù)是可以設置的。如果不設置,默認是100。最大是16384。
2、數(shù)據(jù)庫當前的連接線程數(shù)threads_connected。這是動態(tài)變化的。
查看max_connections、max_connections的辦法見后。
如果
threads_connected
==
max_connections
時,數(shù)據(jù)庫系統(tǒng)就不能提供更多的連接數(shù)了,這時,如果程序還想新建連接線程,數(shù)據(jù)庫系統(tǒng)就會拒絕,如果程序沒做太多的錯誤處理,就會出現(xiàn)類似強壇的報錯信息。
因為創(chuàng)建和銷毀數(shù)據(jù)庫的連接,都會消耗系統(tǒng)的資源。而且為了避免在同一時間同時打開過多的連接線程,現(xiàn)在編程一般都使用所謂數(shù)據(jù)庫連接池技術。
但數(shù)據(jù)庫連接池技術,并不能避免程序錯誤導致連接資源消耗殆盡。
這種情況通常發(fā)生在程序未能及時釋放數(shù)據(jù)庫連接資源或其他原因造成數(shù)據(jù)庫連接資源不能釋放,但強壇系統(tǒng)估計不會發(fā)生這種低級的編程錯誤。
該錯誤的簡便的檢查辦法是,在刷新強壇頁面時,不斷監(jiān)視threads_connected的變化。如果max_connections足夠大,而
threads_connected值不斷增加以至達到max_connections,那么,就應該檢查程序了。當然,如果采用數(shù)據(jù)庫連接池技術,
threads_connected增長到數(shù)據(jù)庫連接池的最大連接線程數(shù)時,就不再增長了。
從強壇出錯的情況看,更大的可能性是數(shù)據(jù)庫系統(tǒng)沒能進行適當?shù)嘏渲谩O旅嫣岢鲆稽c建議。供參考
讓你們的工程師把mysql的最大允許連接數(shù)從默認的100調(diào)成32000。這就不會老出現(xiàn)連接過多的問題了。
查看max_connections
進入mysql,用命令:
show
variables
查看數(shù)據(jù)庫最大可連接數(shù)的變量值:
max_connections
查看threads_connected
進入mysql,用命令:
show
status
查看當前活動的連接線程變量值:
threads_connected
設置max_connections
設置辦法是在my.cnf文件中,添加下面的最后紅色的一行:
[mysqld]
port=3306
#socket=mysql
skip-l
文章標題:怎么釋放mysql連接數(shù) mysql怎么釋放鎖
URL分享:http://www.2m8n56k.cn/article36/dojcgpg.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、響應式網(wǎng)站、用戶體驗、App設計、靜態(tài)網(wǎng)站、微信小程序
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:[email protected]。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)