誰消耗CPU
用戶、系統、IO等待、軟硬中斷、空閒。
其中系統和軟硬中斷是比較難改變的,另外用戶和IO等待消耗了大部分CPU
用戶消耗和IO等待
用戶空間CPU消耗,各種邏輯運算:
- 函數
- 排序
- 類型轉換
- 邏輯IO訪問
- 以及等待IO請求完成
- …
IO等待其實是等待IO請求的完成,這個時候CPU是空閒的
影響
- 吞吐量下降
- 查詢響應時間增加
- 慢查詢數增加
對MySQL的併發增加,也會產生這些影響
吞吐量
QPS:Queries Per Second的縮寫,意思是每秒查詢率。一臺服務器每秒相應的查詢次數。
TPS:Transactions Per Second的縮寫,意思爲事務數/秒。一個事務指客戶機向服務器發送請求,服務器處理,服務器返回結果的過程。在發送請求時計時,收到響應後結束計時,這樣子來計算tps。
併發數:系統同時處理的事務數
系統吞吐量三個重要參數:QPS(TPS),併發數,平均相應時間
QPS(TPS)=併發數/平均響應時間
減少IO等待的消耗
減少IO量:
- 使用合適的索引減少掃描的行數,空間換時間
提升IO處理能力:
- 加cache,加磁盤
減少用戶消耗
減少邏輯運算量:
- 避免使用函數,將運算轉移至應用服務器
- 減少排序,利用索引取得有序數據
- 減少類型轉換
- 儘量使用簡單類型,更小的數據類型佔用更少的磁盤、內存、CPU緩存、CPU週期
減少邏輯IO量:
-
index,優化索引,減少不必要的表掃描
-
table,合理拆分,適度冗餘
很少使用的大字段拆分到獨立表,頻繁使用的小字段冗餘到引用表 -
SQL,調整SQL寫法,利用現有索引,避免掃描和排序
-
數據類型,夠用就行,不必要用大字段
tinyint夠用不用int,int夠用不用bigint
減少Query請求量
- 適當緩存,對多次請求的數據緩存
- 優化實現,去除不必要的重複請求,禁止重複請求相同數據,通過參數傳遞減少訪問
- 合理需求