情境還原:
公司一項目新上線,剛上線的第2天,在後台發現數據庫服務器與IIS服務器的網絡IO出現瓶頸,1GB的網絡帶寬,占用了70%-100%,也就是每秒傳輸數據700MB-1GB,數據庫使用內存高達21GB。
IIS服務器CPU使用率時常爆至80%-90%,導致網站頻頻出現連接超時。
原因:晚上只好暫時關閉網站,進行服務器維護,作全面的檢查跟蹤,發現是一句Select語句導致:
Select * From Table1
這條語句,語法是沒問題的,但在應用上出了問題。Table1存儲的是10多萬行數據,表數據每天都會上萬的增長。
為了統計總行數,頻頻調用這語句,每秒刷新不低於1000次。
也因此導致網絡出現瓶頸。
解決:後面把Select語句改成
復制代碼 代碼如下:
Select Count(*) from Table1
即可解決問題,網絡 IO數據馬上降至10MB以下,數據庫使用內存也保持在預計范圍12GB。
看似非常簡單的問題,其實不然。解決這問題,所花的時間周期是6小時,檢查問題使用1小時,修改代碼使用5小時。