記錄一次問題排查

shog808發表於2021-08-02

1. 問題描述:早上剛來上班,業務部門同事反應管理後臺無法登入

2. 問題排查定位

 2.1 伺服器排查

  a. 介面是否可以調通:首先自己登陸後臺,發現時好時壞,偶爾介面返回【系統忙】。我們系統介面異常調不通會返回系統忙

  b. 服務是否死掉或者假死:連線伺服器->檢視Java程式,服務正常;排除假死:重啟該服務,介面依然調不通

  c. 伺服器各項指標:登入阿里雲->雲伺服器ECS->監控,檢視CPU、記憶體、系統負載、雲盤iops、網路頻寬、連線數,各項指標使用率均在正常範圍

 2.2 資料庫排查

  a. 資料庫各項指標:登入阿里雲->雲資料庫RDS->監控與報警,檢視CPU、記憶體、磁碟空間、iops、網路頻寬、連線總數,其它指標正常,唯獨CPU使用率達到100%

  b.一鍵診斷:登入阿里雲->雲資料庫RDS->自治服務->一鍵診斷,發現CPU使用率偏高,出現了異常慢SQL

    

  c. 慢日誌:日誌管理 -> 慢日誌明細 ,發現有SQL語句耗時7~8分鐘,甚至20~30分鐘。一條SQL語句執行20多分鐘!!!

  d. sql分析:

      

SELECT you.nick_name,you.mobile,ycu.createtime,ycu.id,ycu.ym_userid, ycu.`status`,cir.coupon_name,cir.use_price,if(ycu.status = '1',ycul.createtime,'') as usedtime,cir.coupon_type as couponType, cir.price,cir.province,ycu.end_time 
from ym_coupon_user ycu 

LEFT JOIN ym_org_user you on ycu.ym_userid = you.id 

LEFT JOIN coupon_issue_record cir on ycu.coupon_issue_record_id = cir.id 

LEFT JOIN ym_coupon_used_log ycul on ycu.id = ycul.ym_coupon_user_id 

where 1=1 and you.platform_code ='lngpt' 

order by ycu.createtime desc 

limit 10

  可以看出是四表聯查,如果有資料量比較大的表,然後關聯欄位又沒有索引將會非常耗時

  用explain分析,即在SQL語句前加上關鍵字 EXPLAIN然後執行:

  可以看出,4個表中主表全盤掃描,第2、3表關聯欄位有唯一索引只掃描一行,但是第4張表也進行了全盤掃描。上圖是測試環境,資料量較小。

  線上資料表1和表4分別由10多萬條和4萬多條!然後關聯欄位沒有加索引,導致查詢異常慢。

  給表4的關聯欄位新增索引(ym_coupon_user_id) 後執行EXPLAIN:

  

  可以看出,表4(ycul)也用上了索引,只取出了一行。到此問題得以解決,一條查詢語句耗時由20多分鐘優化到0.16秒~

 

 3. 總結:多表關聯查詢,如果資料量較大查詢太慢,被驅動表的關聯欄位要加索引。

 

----------------------------- 初步分析,待續-----------------------------

 

相關文章