您好,登錄后才能下訂單哦!
背景:mariadb,mycat中間件。
問(wèn)題:DB連接數(shù)過(guò)多;開(kāi)發(fā)使用程序使用連接池連mycat;
DB待優(yōu)化項(xiàng): interactive_timeout,wait_timeout 都是8小時(shí)默認(rèn)值。
mycat配置:100個(gè)分片庫(kù),和其他業(yè)務(wù)庫(kù)?,F(xiàn)在分片庫(kù)用到16分片,后面尚未使用。
當(dāng)前DB最大連接數(shù):3000
mycat 版本:當(dāng)前線上的mycat版本是1.5.8版本,推薦以后線上使用最穩(wěn)定的 mycat1.6.5版本。
經(jīng)DB和開(kāi)發(fā)碰面了解 這兩個(gè)timeout時(shí)間不能縮短,所以常規(guī)的優(yōu)化手段不能使用:
正常DB連接數(shù)1000,數(shù)據(jù)庫(kù)兩個(gè)timeout為300--500,參數(shù)可以全局動(dòng)態(tài)生效。
公司線上DB前段時(shí)間建總出現(xiàn)連接數(shù)過(guò)多問(wèn)題,正常來(lái)說(shuō)連接數(shù)1000,已經(jīng)能夠滿足大部分需求。
正常手段無(wú)法使用的時(shí)候,那么就要找到DB為啥連接數(shù)過(guò)多。
1. 審計(jì)日志
DB上部署過(guò)審計(jì)日志,審計(jì)日志部署請(qǐng)移步:審計(jì)日志部署,審計(jì)日志中可以查看到做壞事的壞小子是誰(shuí)!
因?yàn)闀r(shí)間關(guān)系,未保存。但是從審計(jì)日志中發(fā)現(xiàn)大量訪問(wèn)連接sql就是'select 1' ,也是mycat連接mysql的連接。
且該鏈接連的是大量尚未使用的物理庫(kù)。
至此審計(jì)日志只能判斷到這里。
2. DB層面
mariadb物理庫(kù) information_schema 中processlist表記錄連接相關(guān)信息,比如 DB,HOST,INFO,STATUS等。而且能統(tǒng)計(jì)具體某個(gè)庫(kù)的連接數(shù)。
查詢后,發(fā)現(xiàn)很多沒(méi)有使用的DB中連接很多沒(méi)有釋放,大概占總連接數(shù)的60%左右,使用腳本 "kill id; "后連接仍舊重新連接。
這種情況很尷尬,找不到原因。
3. 審計(jì)日志
再結(jié)合審計(jì)日志,查看連接從哪來(lái)的,還是mycat 發(fā)過(guò)來(lái)的<heartbeat>select 1 </heartbeat>,暫時(shí)就可以定位mycat的heartbeat 問(wèn)題,結(jié)合網(wǎng)上查找的heartbeat算法,
其中有一條是關(guān)于未用的DB連接算法:如果當(dāng)前DB一直有訪問(wèn),那么鏈接該DB 的heartbeat暫不執(zhí)行,未用的DB鏈接300秒重新連接該DB。
這算法是個(gè)人的理解,因能力有限,代碼閱讀能力低,只能理解個(gè)大概;現(xiàn)也能判斷個(gè)大概方向。
4.更改mycat配置
需要減少未使用的datanode,減少后發(fā)現(xiàn),連接數(shù)并未減少。
kill id; 后還是連接數(shù)會(huì)重新增長(zhǎng)。判斷單單更改datanode不是解決問(wèn)題的辦法。
刪除尚未使用的<datanode></datanode>,再次kill id; 操作。未用的<datanode></datanode>連接不再出現(xiàn)。
至此問(wèn)題解決,實(shí)驗(yàn)文字?jǐn)⑹鲚^多,描述較少,僅供讀者參考。
免責(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)容。