本文約1103字,建議閱讀3分鐘 。
本文介紹MySQL引起的CPU消耗過大的優化方法。
用戶+系統+IO等待+軟硬中斷+空閒
用戶
用戶空間CPU消耗,各種邏輯運算
用戶空間消耗大量cpu,產生的系統調用是什麼?那些函數使用了cpu週期?
IO等待
等待IO請求的完成
如vmstat中的wa 很高。但IO等待增加,wa也不一定會上升(請求I/O後等待響應,但進程從核上移開了)
用戶和IO等待消耗了大部分cpu
吞吐量下降(tps)
查詢響應時間增加
慢查詢數增加
對mysql的併發陡增,也會產生上訴影響
減少等待
減少IO量
SQL/index,使用合適的索引減少掃描的行數(需平衡索引的正收益和維護開銷,空間換時間)
提升IO處理能力
減少計算
避免使用函數,將運算轉移至易擴展的應用服務器中
如substr等字符運算,dateadd/datesub等日期運算,abs等數學函數
減少排序,利用索引取得有序數據或避免不必要排序
如union all代替 union,order by 索引字段等
禁止類型轉換,使用合適類型並保證傳入參數類型與數據庫字段類型絕對一致
如數字用tiny/int/bigint等,必需轉換的在傳入數據庫之前在應用中轉好
簡單類型,儘量避免複雜類型,降低由於複雜類型帶來的附加運算。更小的數據類型佔用更少的磁盤、內存、cpu緩存和cpu週期
....