公司一項(xiàng)目新上線,剛上線的第2天,在后臺(tái)發(fā)現(xiàn)數(shù)據(jù)庫(kù)服務(wù)器與IIS服務(wù)器的網(wǎng)絡(luò)IO出現(xiàn)瓶頸,1GB的網(wǎng)絡(luò)帶寬,占用了70%-100%,也就是每秒傳輸數(shù)據(jù)700MB-1GB,數(shù)據(jù)庫(kù)使用內(nèi)存高達(dá)21GB
情境還原:
公司一項(xiàng)目新上線,剛上線的第2天,在后臺(tái)發(fā)現(xiàn)數(shù)據(jù)庫(kù)服務(wù)器與IIS服務(wù)器的網(wǎng)絡(luò)IO出現(xiàn)瓶頸,1GB的網(wǎng)絡(luò)帶寬,占用了70%-100%,也就是每秒傳輸數(shù)據(jù)700MB-1GB,數(shù)據(jù)庫(kù)使用內(nèi)存高達(dá)21GB。
IIS服務(wù)器CPU使用率時(shí)常爆至80%-90%,導(dǎo)致網(wǎng)站頻頻出現(xiàn)連接超時(shí)。
原因:晚上只好暫時(shí)關(guān)閉網(wǎng)站,進(jìn)行服務(wù)器維護(hù),作全面的檢查跟蹤,發(fā)現(xiàn)是一句Select語(yǔ)句導(dǎo)致:
Select * From Table1
這條語(yǔ)句,語(yǔ)法是沒(méi)問(wèn)題的,但在應(yīng)用上出了問(wèn)題。Table1存儲(chǔ)的是10多萬(wàn)行數(shù)據(jù),表數(shù)據(jù)每天都會(huì)上萬(wàn)的增長(zhǎng)。
為了統(tǒng)計(jì)總行數(shù),頻頻調(diào)用這語(yǔ)句,每秒刷新不低于1000次。
也因此導(dǎo)致網(wǎng)絡(luò)出現(xiàn)瓶頸。
解決:后面把Select語(yǔ)句改成
代碼如下:
Select Count(*) from Table1
即可解決問(wèn)題,網(wǎng)絡(luò) IO數(shù)據(jù)馬上降至10MB以下,數(shù)據(jù)庫(kù)使用內(nèi)存也保持在預(yù)計(jì)范圍12GB。
看似非常簡(jiǎn)單的問(wèn)題,其實(shí)不然。解決這問(wèn)題,所花的時(shí)間周期是6小時(shí),檢查問(wèn)題使用1小時(shí),修改代碼使用5小時(shí)。