背景:mariadb,mycat中間件。
問題:DB連接數(shù)過多;開發(fā)使用程序使用連接池連mycat;
DB待優(yōu)化項(xiàng): interactive_timeout,wait_timeout 都是8小時(shí)默認(rèn)值。
mycat配置:100個(gè)分片庫,和其他業(yè)務(wù)庫?,F(xiàn)在分片庫用到16分片,后面尚未使用。
當(dāng)前DB最大連接數(shù):3000
mycat 版本:當(dāng)前線上的mycat版本是1.5.8版本,推薦以后線上使用最穩(wěn)定的 mycat1.6.5版本。
發(fā)展壯大離不開廣大客戶長期以來的信賴與支持,我們將始終秉承“誠信為本、服務(wù)至上”的服務(wù)理念,堅(jiān)持“二合一”的優(yōu)良服務(wù)模式,真誠服務(wù)每家企業(yè),認(rèn)真做好每個(gè)細(xì)節(jié),不斷完善自我,成就企業(yè),實(shí)現(xiàn)共贏。行業(yè)涉及墻體彩繪等,在重慶網(wǎng)站建設(shè)公司、全網(wǎng)營銷推廣、WAP手機(jī)網(wǎng)站、VI設(shè)計(jì)、軟件開發(fā)等項(xiàng)目上具有豐富的設(shè)計(jì)經(jīng)驗(yàn)。
經(jīng)DB和開發(fā)碰面了解 這兩個(gè)timeout時(shí)間不能縮短,所以常規(guī)的優(yōu)化手段不能使用:
正常DB連接數(shù)1000,數(shù)據(jù)庫兩個(gè)timeout為300--500,參數(shù)可以全局動(dòng)態(tài)生效。
公司線上DB前段時(shí)間建總出現(xiàn)連接數(shù)過多問題,正常來說連接數(shù)1000,已經(jīng)能夠滿足大部分需求。
正常手段無法使用的時(shí)候,那么就要找到DB為啥連接數(shù)過多。
1. 審計(jì)日志
DB上部署過審計(jì)日志,審計(jì)日志部署請(qǐng)移步:審計(jì)日志部署,審計(jì)日志中可以查看到做壞事的壞小子是誰!
因?yàn)闀r(shí)間關(guān)系,未保存。但是從審計(jì)日志中發(fā)現(xiàn)大量訪問連接sql就是'select 1' ,也是mycat連接MySQL的連接。
且該鏈接連的是大量尚未使用的物理庫。
至此審計(jì)日志只能判斷到這里。
2. DB層面
mariadb物理庫 information_schema 中processlist表記錄連接相關(guān)信息,比如 DB,HOST,INFO,STATUS等。而且能統(tǒng)計(jì)具體某個(gè)庫的連接數(shù)。
查詢后,發(fā)現(xiàn)很多沒有使用的DB中連接很多沒有釋放,大概占總連接數(shù)的60%左右,使用腳本 "kill id;"后連接仍舊重新連接。
這種情況很尷尬,找不到原因。
3. 審計(jì)日志
再結(jié)合審計(jì)日志,查看連接從哪來的,還是mycat 發(fā)過來的
其中有一條是關(guān)于未用的DB連接算法:如果當(dāng)前DB一直有訪問,那么鏈接該DB 的heartbeat暫不執(zhí)行,未用的DB鏈接300秒重新連接該DB。
這算法是個(gè)人的理解,因能力有限,代碼閱讀能力低,只能理解個(gè)大概;現(xiàn)也能判斷個(gè)大概方向。
4.更改mycat配置
需要減少未使用的datanode,減少后發(fā)現(xiàn),連接數(shù)并未減少。
kill id; 后還是連接數(shù)會(huì)重新增長。判斷單單更改datanode不是解決問題的辦法。
刪除尚未使用的
至此問題解決,實(shí)驗(yàn)文字?jǐn)⑹鲚^多,描述較少,僅供讀者參考。