程序调用mysql突然变慢_排查Mysql突然变慢
定位問(wèn)題
剛開(kāi)始得到是系統(tǒng)慢的反饋,沒(méi)有將問(wèn)題點(diǎn)定位到數(shù)據(jù)庫(kù)上,查了半天服務(wù)是否正常(因?yàn)橹坝幸淮蜠ubbo內(nèi)存泄漏)。
在將應(yīng)用服務(wù)日志查看了一遍后,沒(méi)有發(fā)現(xiàn)任何異常,只是打了幾個(gè)警告的日志。
于是又查看了業(yè)務(wù)運(yùn)行時(shí)的日志,看到日志都提示了一個(gè)?Lock wait timeout exceeded; try restarting transaction?的異常。
這時(shí)還是沒(méi)有將重心放到數(shù)據(jù)庫(kù)上,認(rèn)為是代碼的原因,導(dǎo)致事務(wù)一直沒(méi)有提交。
重新將代碼審閱了一遍,覺(jué)得應(yīng)該不是代碼邏輯的問(wèn)題,而這個(gè)時(shí)候,?Lock wait timeout exceeded; try restarting transaction?這個(gè)異常的日志越來(lái)越多。
認(rèn)為是數(shù)據(jù)庫(kù)層面出了問(wèn)題,開(kāi)始排查數(shù)據(jù)庫(kù)。
尋找原因
由于我們的數(shù)據(jù)庫(kù)不是用的?云RDS版本,是在一臺(tái)8核32G的AWS上的安裝版本。
使用?top?命令,查看到 Mysql 占用的 CPU 使用率高達(dá) 90% 左右。
心里一慌,感覺(jué)不妙,這樣子高負(fù)載的CPU使用率,搞不好服務(wù)器都要宕掉。
于是拿出了僅有的一點(diǎn)Mysql基本知識(shí),基本上這次只使用到了下面幾個(gè)語(yǔ)句:
查看當(dāng)前Mysql所有的進(jìn)程
show processlist;
查看Mysql的最大緩存
show global variables like "global max_allowed_packet"
查看當(dāng)前正在進(jìn)行的事務(wù)
select * from information_schema.INNODB_TRX
查看當(dāng)前Mysql的連接數(shù)
show status like 'thread%'
解決
按照上面的幾個(gè)語(yǔ)句,一步一步跟蹤定位下來(lái)。
show processlist;?下來(lái),我們就可以查看出當(dāng)前所有的進(jìn)程,并且得到最耗時(shí)的進(jìn)程。
在當(dāng)前數(shù)據(jù)庫(kù)中,看到處于?Sleep?狀態(tài)的SQL非常多,而這也是占用CPU過(guò)高的重大原因,休眠線(xiàn)程太多,于是配置了一個(gè)?wait_time_out?為 600 秒的一個(gè)解決方案。
為什么配置600秒,因?yàn)槲覀儜?yīng)用超時(shí)時(shí)間配置的最大時(shí)間就是 600秒,10分鐘,這里的配置需要根據(jù)業(yè)務(wù)來(lái)具體配置。
select * from information_schema.INNODB_TRX
執(zhí)行這個(gè)語(yǔ)句,看到Mysql中大部分處于?Lock?的SQL是一條 update 的SQL,而且還有一個(gè)單條件的SQL,查詢(xún)居然耗時(shí)4分鐘,很是驚訝。
于是查看了這張表。
剛一打開(kāi)結(jié)構(gòu),差點(diǎn)沒(méi)忍住口吐芬芳,居然一個(gè)索引都沒(méi)有,數(shù)據(jù)量超過(guò)300W,沒(méi)有索引查詢(xún)基本上都要4分鐘往上走。
于是準(zhǔn)備加上索引,在一陣漫長(zhǎng)的等待中,索引終于加上去了。
show status like 'thread%'
索引加上去了之后,查看了一下當(dāng)前Mysql的連接數(shù),似乎沒(méi)有之前那么高了,估計(jì)是擠壓的太多。
然后又查看了下服務(wù)器的CPU占用率,這次好了一點(diǎn),從1%到80%來(lái)回跳動(dòng),沒(méi)有出現(xiàn)90&那么高的頻率。
總結(jié)
Mysql作為使用頻率非常高的數(shù)據(jù)庫(kù),對(duì)于它的SQL調(diào)優(yōu)真的是一門(mén)技術(shù)活,而且項(xiàng)目中的一些SQL看的也是想吐,這種調(diào)優(yōu)起來(lái)真的難上加難。
其實(shí)?information_schema?這個(gè)數(shù)據(jù)庫(kù),里面的Mysql日志看起來(lái)比業(yè)務(wù)日志順眼的很多。
總結(jié)
以上是生活随笔為你收集整理的程序调用mysql突然变慢_排查Mysql突然变慢的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
 
                            
                        - 上一篇: 拼多多水滴怎么赠送他人 拼多多水滴赠送他
- 下一篇: win10怎么设置图片开机密码 win1
