[MySQL CPU]線上飆升800%,load達到12的解決過程
接到報警通知,負載過高,達到800%,load也過高,有11了。
MySQL版本為5.6.12-log
1 top 之後,確實是mysqld程式佔據了所有資源。
2 檢視error日誌,無任何異常
3 show eninge innodb status\G,沒有死鎖資訊。
4 show full processlist;
沒有耗時非常大的慢sql再跑。看併發,當前的執行緒總數量也才30個左右。
5 檢視iostat,讀寫正常。
到底是什麼問題呢?檢視slow log,發現如下SQL,頻繁執行,耗時在5秒之間,explain有Using join buffer (Block Nested Loop)
mysql> explain select web_page_object.web_page_object_id, -> web_page_object.object_id, -> web_div_name,web_page_object.position_sort,web_page_object.end_time,om1.label,om1.file,jump_url,om2.label as label1,om2.file as file1 -> from web_page_div,web_page_object,object_media as om1,object_media as om2 -> where web_page_div.id=web_page_object.web_page_div_id -> and web_page_object.object_media_id=om1.object_media_id -> and web_page_div.web_page_id=1200 -> and if(web_page_object.object_media_id1=0, -> web_page_object.object_media_id=om2.object_media_id, -> web_page_object.object_media_id1=om2.object_media_id) -> -> and '2014-05-01 15:09:49'>=start_time -> and '2014-05-01 15:09:49'<= end_time -> -> and object_status=0 -> order by web_page_div.id,web_page_object.position_sort; +----+-------------+-----------------+--------+-----------------------+---------+---------+-------------------------------------------+-------+----------------------------------------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-----------------+--------+-----------------------+---------+---------+-------------------------------------------+-------+----------------------------------------------------+ | 1 | SIMPLE | web_page_object | ALL | object_media_id_index | NULL | NULL | NULL | 51165 | Using where; Using temporary; Using filesort | | 1 | SIMPLE | web_page_div | eq_ref | PRIMARY,idx | PRIMARY | 4 | db_jiapin.web_page_object.web_page_div_id | 1 | Using where | | 1 | SIMPLE | om1 | eq_ref | PRIMARY | PRIMARY | 4 | db_jiapin.web_page_object.object_media_id | 1 | Using where | | 1 | SIMPLE | om2 | ALL | NULL | NULL | NULL | NULL | 74759 | Using where; Using join buffer (Block Nested Loop) | +----+-------------+-----------------+--------+-----------------------+---------+---------+-------------------------------------------+-------+----------------------------------------------------+ Using join buffer (Block Nested Loop)
看SQL是where後面的if判斷引起的,拆分if之後,就正常了,SQL耗時不到0.1秒。資料庫load也降下來了。
還記錄以前碰到的
(Block Nested Loop)的案例是 join後面的on條件裡面有or判斷。
也會引起Block Nested Loop,導致資料庫負載過高。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26230597/viewspace-1152554/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- cpu飆升排查命令
- CPU 飆升怎麼辦?
- 一次FGC導致CPU飆高的排查過程GC
- 解決MacBook Pro升級風扇狂轉和CPU飆高問題Mac
- 一次線上問題的排查解決過程
- 運維告訴我CPU飆升300%,為什麼我的程式上線就奔潰了運維
- 從精準表達到成交絕技,解鎖業績飆升的鑰匙
- 記一次線上服務CPU 100%的處理過程
- mysql佔用CPU過高的解決辦法(新增索引)MySql索引
- 開會時CPU 飆升100%同事們都手忙腳亂記一次應急處理過程
- Glide的load()過程原始碼分析IDE原始碼
- MySQL升級過程中的一些心得-2MySql
- MySQL升級過程中的一些心得-1MySql
- 記一次JVM FullGC引發嚴重線上事故的定位、分析、解決過程!JVMGC
- MYSQL 連線登入過程分析MySql
- mysql遠端連線不上怎麼解決?MySql
- 解決:Failed to load ApplicationContextAIAPPContext
- CPU飆升?教你1分鐘抓取佔用系統資源的程式
- 線上的一次fullgc排查過程GC
- Centos 7 升級通過 yum 安裝的 MySQL 5.7 到 MySQL 8.0CentOSMySql
- 感官刺激——令人腎上腺素飆升的遊戲遊戲
- 你要偷偷學會排查線上CPU飆高的問題,然後驚豔所有人!
- 如何處理MySQL經常出現CPU佔用率達到99%MySql
- 解決Mybatis連線Sql server 出現 Cannot load JDBC driver class 'com.mysql.jdbc.Driver '的問題MyBatisServerJDBCMySql
- MySQL的session過程MySqlSession
- SQL Server 2016升級遷移過程中效能問題解決案例SQLServer
- 解決線上Oracle連線耗時過長的問題現象RPYBOracle
- 詳細瞭解 synchronized 鎖升級過程synchronized
- 解決Mac版微信因為特殊字元記憶體飆升卡死的方法Mac字元記憶體
- UCAS:2019年申請英國大學的中國學生人數達到19760人 飆升30%
- synchronized升級過程synchronized
- MySQL伺服器連線過程淺析MySql伺服器
- 一個 ExpressionChangedAfterItHasBeenCheckedError 錯誤的解決過程ExpressError
- 儲存raid5陣列兩塊盤掉線的解決過程AI陣列
- 網際網路公司專案的上線過程
- 一次線上介面超時的排查過程
- 【RMAN】Oracle11g透過rman升級到12cOracle
- 詳解MeterSphere 配置外部Mysql5.7的全過程MySql
- 阿里雲異常流量及異常網路連線的安全解決過程阿里