欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL CPU占用過高的排查指南

 更新時(shí)間:2025年08月05日 09:09:12   作者:明湖起風(fēng)了  
使用關(guān)系數(shù)據(jù)庫MySQL版時(shí),如果您的CPU使用率很高或接近100%,會導(dǎo)致數(shù)據(jù)讀寫處理緩慢、連接緩慢、刪除出現(xiàn)報(bào)錯(cuò)等,從而影響業(yè)務(wù)正常運(yùn)行,所以本文給大家介紹了MySQL CPU占用過高的排查指南,需要的朋友可以參考下

MySQL CPU 占用過高時(shí),排查具體占用資源的表需結(jié)合系統(tǒng)監(jiān)控、數(shù)據(jù)庫分析工具和 SQL 診斷命令。

一、快速定位問題根源?

?確認(rèn) MySQL 進(jìn)程占用 CPU?

  • 使用 tophtop 命令查看系統(tǒng)進(jìn)程,確認(rèn)是否為 mysqld 進(jìn)程導(dǎo)致 CPU 飆升。
  • 若 MySQL 進(jìn)程持續(xù)占用 90% 以上 CPU,需深入分析數(shù)據(jù)庫內(nèi)部操作。

?區(qū)分負(fù)載類型:QPS 激增 vs. 慢查詢?

  • ?QPS 激增?:對比 CPU 曲線與 QPS(每秒查詢量)曲線是否同步波動(dòng)。若同步,說明高并發(fā)導(dǎo)致 CPU 壓力。
    • 計(jì)算 QPS:
SHOW GLOBAL STATUS LIKE 'Questions';  -- 獲取總查詢量
SHOW GLOBAL STATUS LIKE 'Uptime';     -- 獲取運(yùn)行時(shí)間(秒)
-- QPS = Questions / Uptime
  • ?慢查詢?yōu)橹?/strong>?:若 CPU 飆高而 QPS 未明顯上升,大概率是慢 SQL 或鎖競爭導(dǎo)致。

二、定位高資源消耗的表?

?方法 1:實(shí)時(shí)分析活躍線程?

通過 SHOW FULL PROCESSLIST 或系統(tǒng)表查詢當(dāng)前執(zhí)行的 SQL 及操作的表:

-- 查看所有活躍線程(非 Sleep 狀態(tài))
SELECT * FROM information_schema.PROCESSLIST 
WHERE COMMAND != 'Sleep' AND TIME > 10  -- 篩選執(zhí)行時(shí)間>10秒的線程
ORDER BY TIME DESC;
  • ?關(guān)鍵字段?:
    • STATE:若為 Sending dataSorting resultCreating tmp table,表示可能涉及全表掃描或復(fù)雜計(jì)算。
    • INFO:顯示正在執(zhí)行的 SQL,從中提取操作的表名。

?方法 2:分析慢查詢?nèi)罩?

  • ?開啟慢查詢?nèi)罩?/strong>?:
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 1;  -- 記錄超過1秒的查詢
SET GLOBAL slow_query_log_file = '/var/log/mysql/slow.log';
  • ?使用工具分析日志?:
    • ?**pt-query-digest(Percona Toolkit)?**?:
pt-query-digest /var/log/mysql/slow.log --limit 10  -- 輸出消耗最高的前10個(gè)查詢
  • ?輸出結(jié)果關(guān)注點(diǎn)?:
    • Table:被頻繁操作的表名。
    • Rows_examined:掃描行數(shù)過大(如百萬級)的表。
    • Query_time:單次執(zhí)行耗時(shí)長的 SQL。

?方法 3:通過 Performance Schema 定位表級操作?

-- 查看消耗 CPU 最高的 SQL 及其操作的表
SELECT 
  DIGEST_TEXT AS query,
  SCHEMA_NAME AS db,
  COUNT_STAR AS exec_count,
  SUM_TIMER_WAIT/1e9 AS total_time_sec,
  SUM_ROWS_EXAMINED AS rows_examined
FROM performance_schema.events_statements_summary_by_digest 
ORDER BY total_time_sec DESC 
LIMIT 10;
  • ?關(guān)鍵信息?:
    • query 字段可直接看到 SQL 操作的表(如 SELECT * FROM orders)。
    • exec_count 該SQL模式被執(zhí)行的次數(shù)
    • ?total_time_sec 該SQL模式所有執(zhí)行的總耗時(shí)(單位:皮秒,除以1e9轉(zhuǎn)換為秒;例如:SUM_TIMER_WAIT=1234567890000 → 1.23456789秒;識別最耗時(shí)的SQL模式
    • rows_examined 該SQL模式所有執(zhí)行中檢查的總行數(shù);?例如?:1000000(表示這個(gè)SQL模式總共掃描了100萬行)?,用于識別全表掃描或索引效率低下的查詢

?方法 4:檢查表大小與索引狀態(tài)?

?查詢表空間占用?:

SELECT 
  TABLE_NAME,
  ROUND((DATA_LENGTH + INDEX_LENGTH)/1024/1024, 2) AS size_mb,
  TABLE_ROWS
FROM information_schema.TABLES 
WHERE TABLE_SCHEMA = 'your_database'
ORDER BY size_mb DESC;
  • ?大表(GB 級)?? 更容易因全表掃描導(dǎo)致 CPU 飆升。
  • ?小表但高掃描頻次?:可能索引缺失或統(tǒng)計(jì)信息過期。

?檢查索引有效性?:

-- 查看表的索引情況
SHOW INDEX FROM your_table;
  • Cardinality(基數(shù))遠(yuǎn)小于實(shí)際行數(shù),說明索引可能失效,需更新統(tǒng)計(jì)信息:
ANALYZE TABLE your_table;

?三、針對性優(yōu)化措施?

?緊急處理?:

終止高消耗線程:

KILL <thread_id>;  -- 從 PROCESSLIST 獲取 thread_id

?索引優(yōu)化?:

  • 為高頻查詢的 WHERE、JOINORDER BY 字段添加索引。
  • 避免索引失效:
    • 禁止對索引列使用函數(shù)(如 WHERE DATE(create_time) = ...)。
    • 避免隱式類型轉(zhuǎn)換(如字符串字段用數(shù)字查詢)。

?SQL 重寫?:

  • 拆分復(fù)雜查詢(如將子查詢改為 JOIN)。
  • 減少 SELECT *,僅返回必要字段。
  • 分頁查詢優(yōu)化:用 WHERE id > last_id LIMIT n 替代 OFFSET。

?配置調(diào)整?:

增加臨時(shí)表大小,避免磁盤臨時(shí)表:

tmp_table_size = 256M
max_heap_table_size = 256M

調(diào)整 InnoDB 緩沖池(通常設(shè)為物理內(nèi)存的 70%):

innodb_buffer_pool_size = 8G

?架構(gòu)擴(kuò)展?:

  • 讀寫分離:將查詢分流到只讀副本。
  • 分庫分表:對億級大表按業(yè)務(wù)拆分。

排查工具推薦?

?工具類型??推薦工具??用途?
?系統(tǒng)監(jiān)控?top, htop, vmstat定位進(jìn)程及線程級 CPU 占用
?SQL 分析?pt-query-digest, EXPLAIN分析慢查詢及執(zhí)行計(jì)劃
?實(shí)時(shí)診斷?SHOW PROCESSLIST, sys.schema查看活躍線程與資源消耗
?可視化監(jiān)控?Prometheus + Grafana, PMM長期追蹤性能指標(biāo)(QPS/CPU/鎖)

注意?

  • ?鎖競爭問題?:若 SHOW PROCESSLIST 顯示大量線程狀態(tài)為 Waiting for table lock,需檢查長事務(wù)或死鎖(information_schema.INNODB_TRX)。
  • ?外部因素?:備份任務(wù)、批量數(shù)據(jù)維護(hù)也可能導(dǎo)致 CPU 短暫飆高,需結(jié)合操作日志排查。

以上就是MySQL CPU占用過高的排查指南的詳細(xì)內(nèi)容,更多關(guān)于MySQL CPU占用過高的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 詳解MySQL 8.0 之不可見索引

    詳解MySQL 8.0 之不可見索引

    這篇文章主要介紹了MySQL 8.0 之不可見索引的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)新版本的MySQL,感興趣的朋友可以了解下
    2020-10-10
  • Mysql使用函數(shù)json_extract處理Json類型數(shù)據(jù)的方法實(shí)例

    Mysql使用函數(shù)json_extract處理Json類型數(shù)據(jù)的方法實(shí)例

    在日常業(yè)務(wù)開發(fā)中通常mysql數(shù)據(jù)庫中某個(gè)字段會需要存儲json格式字符串,下面這篇文章主要給大家介紹了關(guān)于Mysql使用函數(shù)json_extract處理Json類型數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • mysql最左前綴法則導(dǎo)致索引失效的解決

    mysql最左前綴法則導(dǎo)致索引失效的解決

    最左前綴是在使用innodb存儲引擎索引時(shí),需要遵守的法則,本文主要介紹了mysql最左前綴法則導(dǎo)致索引失效的解決,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-07-07
  • mysql中使用replace替換某字段的部分內(nèi)容

    mysql中使用replace替換某字段的部分內(nèi)容

    這篇文章主要介紹了mysql中使用replace替換某字段的部分內(nèi)容的方法,需要的朋友可以參考下
    2014-11-11
  • 深入理解MySQL中的主鍵、超鍵、候選鍵、外鍵

    深入理解MySQL中的主鍵、超鍵、候選鍵、外鍵

    文詳細(xì)介紹了MySQL數(shù)據(jù)庫中的四種關(guān)鍵鍵類型:主鍵、超鍵、候選鍵和外鍵,并探討了它們在數(shù)據(jù)庫設(shè)計(jì)和管理中的作用,感興趣的可以了解一下
    2024-09-09
  • windows 10 下mysql-8.0.17-winx64的安裝方法圖解

    windows 10 下mysql-8.0.17-winx64的安裝方法圖解

    這篇文章主要介紹了windows 10 mysql-8.0.17-winx64的方法,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-08-08
  • MySQL分區(qū)表的使用

    MySQL分區(qū)表的使用

    本文詳細(xì)介紹了在MySQL中創(chuàng)建分區(qū)表的方法和注意事項(xiàng),包括Range和List兩種常見分區(qū)類型的具體操作流程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-10-10
  • MySQL/MariaDB中如何支持全部的Unicode

    MySQL/MariaDB中如何支持全部的Unicode

    MySQL/MariaDB中,utf8字符集并不是對Unicode的真正實(shí)現(xiàn),那么MySQL/MariaDB中如何支持全部的Unicode,感興趣的朋友可以了解一下
    2021-08-08
  • MySQL數(shù)據(jù)庫wait_timeout參數(shù)詳細(xì)介紹

    MySQL數(shù)據(jù)庫wait_timeout參數(shù)詳細(xì)介紹

    這篇文章主要介紹了MySQL數(shù)據(jù)庫wait_timeout參數(shù)詳細(xì)介紹的相關(guān)資料,wait_timeout是MySQL中用于控制非交互式連接等待時(shí)間的系統(tǒng)變量,影響服務(wù)器資源管理和安全性,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-12-12
  • MySQL安裝配置以及安裝失敗解決過程

    MySQL安裝配置以及安裝失敗解決過程

    我們在下載完MYSQL時(shí),安裝可能會遇到或大或小的問題,下面這篇文章主要給大家介紹了關(guān)于MySQL安裝配置以及安裝失敗解決的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04

最新評論