對於jvm引起的cpu過高的問題,已經有很多解決套路了,本文再來分析一下如果是mysql服務cpu過高應該如何排查!
可以通過vmstat進行排查,關注使用者空間(us)、系統空間(sy)、io等待(wa)、軟硬中斷(in)、空閒(id),而系統空間(sy)、軟硬中斷(in)一般我們也控制不了,所以主要圍繞us、wa、id來分析。
那有可能是存在大量的函式計算、排序等類似的操作
那有可能是慢查詢過多,或者併發量過高。
其實對於mysql而言,不像我們自己寫的應用程式,你可能還需要排查**bug,或者**質量等原因,一般我們要做的就是參考一些大廠的sql規範,再結合自己的業務特點,合理設計即可。
現在的微服務架構體系,不能完全按照三正規化進行設計,有時候還需要一些反正規化的設計,比如:如果把乙個不經常發生改變的字段冗餘起來,就能避免之後的rpc的呼叫,那還是值得的,又或者你一定聽說過全域性表的概念。
比如:如果tinyint夠使用的就不要用int,varchar(16)夠的就不要用varchar(255)(預設是255,有些人也不修改)。
更小的資料型別也就意味著占用的磁碟空間更小,記憶體一次快取的資料就越多,cpu一次處理的速度就更快。
查詢引數的型別不要和資料庫欄位的型別不一致,否則還需要呼叫函式進行一次型別轉換的過程
可以把大量的函式運算放在應用服務端完成
優化索引的選擇,適當、合理的建立索引,禁止建立不必要的索引,索引過多會造成修改、插入、刪除操作變慢。
當然除了這些優化點之外,再往上看,單台服務總是存在瓶頸的,所以分庫分表、讀寫分離、應用級別的快取、減少重複的sql請求等等都是需要考慮的問題。
mysql怎麼優化 MYSQL如何優化?
mysql如何優化?結合你的經驗 1.資料庫的設計 盡量把資料庫設計的更小的佔磁碟空間.1 盡可能使用更小的整數型別.mediumint就比int更合適 2 盡可能的定義欄位為not null,除非這個字段需要null.3 如果沒有用到變長字段的話比如varchar,那就採用固定大小的紀錄格式比如c...
MySQL 如何優化
優化總結 列名描述 type 針對單錶的訪問方法,至少要達到range級別,杜絕出現all級別 key實際上使用的索引,如果沒有選擇索引,值是null ref當使用索引列等值查詢時,與索引列進行等值匹配的物件資訊 rows 預估的需要讀取的記錄條數 extra 額外的資訊 比如設計的聯合索引是 na...
如何MySQL優化總結 mysql優化小結
目標 掌握常見的優化方法 一.如何通過慢日誌發現有問題的sql?1 查詢次數多且每次查詢占用時間長的sql 通過pt query digest分析查詢sql 2 io比較大的sql 通過pt query digest分析rows examine項 3 未命中索引的sql 通過pt query dig...