[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飆升排查命令
- CPU 飆升怎麼辦?
- 一次FGC導致CPU飆高的排查過程GC
- 解決MacBook Pro升級風扇狂轉和CPU飆高問題Mac
- 從精準表達到成交絕技,解鎖業績飆升的鑰匙
- 一次線上問題的排查解決過程
- mysql佔用CPU過高的解決辦法(新增索引)MySql索引
- 【mysql】配置MySQL,解決安裝過程中的問題MySql
- TNS-12500解決過程(zt)
- 開會時CPU 飆升100%同事們都手忙腳亂記一次應急處理過程
- MySQL儲存過程詳解 mysql 儲存過程MySql儲存過程
- 記一次線上服務CPU 100%的處理過程
- 分享:MySQL資料庫崩潰解決過程MySql資料庫
- ORA-30012錯誤的解決過程
- 【系統優化】資料庫系統load飆高問題解決思路優化資料庫
- MySQL儲存過程詳解 mysql 儲存過程linkMySql儲存過程
- CPU飆升?教你1分鐘抓取佔用系統資源的程式
- w3wp佔用CPU過高的解決過程,由Dictionary執行緒安全引起執行緒
- MySQL升級過程中的一些心得-1MySql
- MySQL升級過程中的一些心得-2MySql
- 【故障處理】ORA-30012的解決過程
- 從Mysql白丁到Mysql達人系列培訓課程一MySql
- 從Mysql白丁到Mysql達人系列培訓課程二MySql
- Glide的load()過程原始碼分析IDE原始碼
- crontab失敗的解決過程
- 【系統最佳化】資料庫系統load飆高問題解決思路資料庫
- 解決Mac版微信因為特殊字元記憶體飆升卡死的方法Mac字元記憶體
- 如何處理MySQL經常出現CPU佔用率達到99%MySql
- 當CPU飆升時,找出PHP中可能有問題的程式碼行PHP
- Mysql安裝過程中遇到的問題及解決辦法MySql
- Centos 7 升級通過 yum 安裝的 MySQL 5.7 到 MySQL 8.0CentOSMySql
- mysql儲存過程詳解MySql儲存過程
- mysql ab主從複製出錯及解決過程MySql
- 請教一個程式執行時,從磁碟到記憶體到CPU的過程?記憶體
- 記錄一個拷貝檔案到GlusterFS卡住的解決過程
- 升級RH9.0到2.6.5核心全過程(轉)
- 詳細瞭解 synchronized 鎖升級過程synchronized