MySQL的cpu使用率100%的問題排查流程
1. 確認(rèn)CPU占用來源
- 檢查系統(tǒng)進(jìn)程
使用top或htop命令,確認(rèn)是否是mysqld進(jìn)程導(dǎo)致CPU滿載:
top -c -p $(pgrep mysqld)
2. 實時分析MySQL活動
- 查看當(dāng)前運行的SQL
登錄MySQL,執(zhí)行以下命令,觀察是否有長時間運行或高頻率的查詢:
SHOW FULL PROCESSLIST; -- 或過濾非空閑連接 SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST WHERE COMMAND != 'Sleep' AND TIME > 0;

- 終止問題查詢
若發(fā)現(xiàn)異常查詢,可通過KILL [PROCESS_ID]終止。
3. 分析慢查詢與執(zhí)行計劃
啟用慢查詢?nèi)罩?/strong>
在MySQL配置文件(my.cnf/my.ini)中啟用慢查詢?nèi)罩荆?/p>
slow_query_log = 1 slow_query_log_file = /var/log/mysql/slow.log long_query_time = 2 -- 閾值(秒)
重啟MySQL后,使用
mysqldumpslow或pt-query-digest分析日志。使用
EXPLAIN分析SQL
對可疑查詢添加EXPLAIN,檢查是否缺少索引或全表掃描:
EXPLAIN SELECT * FROM your_table WHERE your_condition;
4. 檢查索引與表結(jié)構(gòu)
- 索引缺失通過
SHOW CREATE TABLE檢查表結(jié)構(gòu),確保高頻查詢字段有索引。 - 冗余索引使用
pt-duplicate-key-checker工具刪除無效索引。 - 統(tǒng)計信息過時執(zhí)行
ANALYZE TABLE your_table;更新統(tǒng)計信息。
5. 排查鎖爭用與事務(wù)
- 查看當(dāng)前鎖狀態(tài)
SHOW ENGINE INNODB STATUS; -- 查看LATEST DETECTED DEADLOCK SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX; -- 運行中的事務(wù) SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS; -- 當(dāng)前持有的鎖
- 長事務(wù)處理終止未提交的長事務(wù)或優(yōu)化事務(wù)代碼。
6. 檢查MySQL配置
- 關(guān)鍵參數(shù)調(diào)優(yōu)
innodb_buffer_pool_size:建議設(shè)置為物理內(nèi)存的70%-80%。max_connections:避免過高導(dǎo)致資源爭用。tmp_table_size和max_heap_table_size:減少磁盤臨時表。
- 連接數(shù)監(jiān)控
SHOW STATUS LIKE 'Threads_connected'; -- 當(dāng)前連接數(shù) SHOW VARIABLES LIKE 'max_connections'; -- 最大允許連接數(shù)
7. 系統(tǒng)資源與硬件瓶頸
- 內(nèi)存與交換分區(qū)使用
free -h或vmstat檢查內(nèi)存是否不足,導(dǎo)致頻繁Swap。 - 磁盤I/O使用
iostat或iotop查看磁盤負(fù)載,優(yōu)化高I/O操作(如批量寫入、索引重建)。 - CPU架構(gòu)確認(rèn)是否因并發(fā)線程過多導(dǎo)致CPU爭用(如
innodb_thread_concurrency設(shè)置)。
8. 其他可能原因
- 復(fù)制問題主從復(fù)制延遲或錯誤可能導(dǎo)致從庫CPU升高,檢查
SHOW SLAVE STATUS。 - 緩存失效如查詢緩存(
query_cache_type)頻繁失效,考慮關(guān)閉。 - 日志寫入壓力關(guān)閉不必要的日志(如通用查詢?nèi)罩荆?,或調(diào)整
sync_binlog參數(shù)。
9. 使用專業(yè)工具
- 監(jiān)控工具Percona Monitoring and Management (PMM)、VividCortex 或 Prometheus + Grafana。
- 性能分析工具
pt-query-digest、mysqlsla或 MySQL自帶的Performance Schema。
快速處理步驟
top確認(rèn)MySQL進(jìn)程導(dǎo)致CPU滿載。SHOW PROCESSLIST查找異常查詢。EXPLAIN分析問題SQL,優(yōu)化索引或查詢邏輯。- 終止阻塞進(jìn)程(
KILL)或重啟MySQL(臨時恢復(fù))。
通過以上步驟,多數(shù)情況下可以定位到CPU過高的根本原因,如慢查詢、索引缺失、配置不當(dāng)或硬件瓶頸,進(jìn)而針對性優(yōu)化。若問題復(fù)雜,建議結(jié)合監(jiān)控工具長期跟蹤分析。
最后
以上就是MySQL的cpu使用率100%的問題排查流程的詳細(xì)內(nèi)容,更多關(guān)于MySQL cpu使用率100%的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
MySQL如何基于Explain關(guān)鍵字優(yōu)化索引功能
這篇文章主要介紹了MySQL如何基于Explain關(guān)鍵字優(yōu)化索引功能,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-10-10
percona-toolkit對MySQL的復(fù)制和監(jiān)控類操作教程
這篇文章主要介紹了使用percona-toolkit對MySQL進(jìn)行復(fù)制和監(jiān)控類操作的教程,percona-toolkit是一款強大的MySQL輔助軟件,需要的朋友可以參考下2015-11-11
常見數(shù)據(jù)庫中SQL分頁語法整理大全(附示例)
數(shù)據(jù)庫分頁是數(shù)據(jù)庫管理系統(tǒng)中非常常見的一種操作,主要用于在大量數(shù)據(jù)中進(jìn)行高效的瀏覽,提高用戶體驗,這篇文章主要介紹了常見數(shù)據(jù)庫中SQL分頁語法整理的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-04-04

