如果是 MySQL 引起的 CPU 消耗過大,你會如何優化?

用戶+系統+IO等待+軟硬中斷+空閒

用戶空間CPU消耗,各種邏輯運算

用戶空間消耗大量cpu,產生的系統調用是什麼?那些函數使用了cpu週期?

等待IO請求的完成

如vmstat中的wa 很高。但IO等待增加,wa也不一定會上升(請求I/O後等待響應,但進程從核上移開了)

用戶和IO等待消耗了大部分cpu

吞吐量下降(tps)

減少IO量

SQL/index,使用合適的索引減少掃描的行數(需平衡索引的正收益和維護開銷,空間換時間)

提升IO處理能力

避免使用函數,將運算轉移至易擴展的應用服務器中
如substr等字符運算,dateadd/datesub等日期運算,abs等數學函數

減少排序,利用索引取得有序數據或避免不必要排序
如union all代替 union,order by 索引字段等

禁止類型轉換,使用合適類型並保證傳入參數類型與數據庫字段類型絕對一致
如數字用tiny/int/bigint等,必需轉換的在傳入數據庫之前在應用中轉好

簡單類型,儘量避免複雜類型,降低由於複雜類型帶來的附加運算。更小的數據類型佔用更少的磁盤、內存、cpu緩存和cpu週期

....


分享到:


相關文章: