最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

查詢MySQL的CPU使用率突然變高的幾種方法

 更新時(shí)間:2025年12月16日 08:24:43   作者:會(huì)飛的土撥鼠呀  
本文詳細(xì)介紹了如何排查和解決MySQL CPU使用率突然變高的問(wèn)題,包括緊急定位、深入分析和長(zhǎng)期監(jiān)控三個(gè)階段,緊急定位階段通過(guò)查看當(dāng)前運(yùn)行的線程和MySQL全局狀態(tài),快速鎖定耗CPU的SQL或連接,需要的朋友可以參考下

一、緊急定位:找出消耗CPU的MySQL線程

首先要快速找到是哪些SQL或連接在消耗CPU,這一步能幫你快速鎖定問(wèn)題。

1. 登錄MySQL,查看當(dāng)前運(yùn)行的線程

-- 查看所有活躍線程,按CPU使用時(shí)間排序(最耗CPU的排在前面)
SHOW FULL PROCESSLIST;

-- 更詳細(xì)的查詢(推薦),包含執(zhí)行時(shí)間、鎖等待等關(guān)鍵信息
SELECT 
    id,
    user,
    host,
    db,
    command,
    time,
    state,
    LEFT(info, 500) AS sql_text, -- 顯示SQL語(yǔ)句前500個(gè)字符
    EXECUTION_TIME,
    LOCK_TIME
FROM INFORMATION_SCHEMA.PROCESSLIST 
WHERE command != 'Sleep' -- 排除休眠連接
  AND info IS NOT NULL   -- 排除無(wú)SQL的線程
ORDER BY time DESC;      -- 按執(zhí)行時(shí)間降序

關(guān)鍵字段解讀

  • time:SQL執(zhí)行的秒數(shù)(長(zhǎng)時(shí)間運(yùn)行的SQL優(yōu)先排查)
  • state:線程狀態(tài)(如Sending data、Sorting result、Updating等,代表SQL執(zhí)行階段)
  • sql_text:具體執(zhí)行的SQL語(yǔ)句(核心排查對(duì)象)

2. 查看MySQL全局狀態(tài)和CPU相關(guān)指標(biāo)

-- 查看MySQL自啟動(dòng)以來(lái)的統(tǒng)計(jì)信息(重點(diǎn)關(guān)注CPU相關(guān))
SHOW GLOBAL STATUS LIKE '%CPU%';
SHOW GLOBAL STATUS LIKE 'Threads%'; -- 線程數(shù)(過(guò)多會(huì)導(dǎo)致CPU高)
SHOW GLOBAL STATUS LIKE 'Queries';  -- 總查詢數(shù)
SHOW GLOBAL STATUS LIKE 'Slow_queries'; -- 慢查詢數(shù)

3. 臨時(shí)處理:終止耗CPU的線程(緊急情況)

如果發(fā)現(xiàn)某個(gè)SQL長(zhǎng)時(shí)間運(yùn)行且消耗大量CPU,可臨時(shí)終止:

-- 替換為實(shí)際的線程ID(從PROCESSLIST中獲?。?
KILL [線程ID];

二、深入分析:找出CPU高的根本原因

定位到耗CPU的SQL后,需要分析為什么這些SQL會(huì)消耗大量CPU,常見(jiàn)原因包括:索引缺失、SQL寫(xiě)法差、配置不合理、鎖競(jìng)爭(zhēng)等。

1. 檢查慢查詢?nèi)罩荆ㄗ詈诵牡呐挪槭侄危?/h3>

慢查詢?nèi)罩緯?huì)記錄執(zhí)行時(shí)間超過(guò)long_query_time的SQL,是排查CPU高的核心工具。

(1)開(kāi)啟慢查詢?nèi)罩荆ㄅR時(shí)生效,無(wú)需重啟)

-- 設(shè)置慢查詢閾值(如1秒,執(zhí)行超過(guò)1秒的SQL會(huì)被記錄)
SET GLOBAL slow_query_log = ON;
SET GLOBAL long_query_time = 1;
-- 記錄未使用索引的SQL(即使執(zhí)行時(shí)間短,無(wú)索引也可能導(dǎo)致CPU高)
SET GLOBAL log_queries_not_using_indexes = ON;
-- 查看慢查詢?nèi)罩韭窂?
SHOW VARIABLES LIKE 'slow_query_log_file';

(2)分析慢查詢?nèi)罩?/h4>

使用mysqldumpslow工具(MySQL自帶)分析慢查詢?nèi)罩荆?/p>

# 查看慢查詢?nèi)罩韭窂?
mysql -uroot -p -e "SHOW VARIABLES LIKE 'slow_query_log_file'"

# 分析慢查詢?nèi)罩荆ㄌ鎿Q為實(shí)際路徑)
mysqldumpslow -s t -t 10 /var/lib/mysql/xxx-slow.log

參數(shù)說(shuō)明:

  • -s t:按執(zhí)行時(shí)間排序
  • -t 10:顯示前10條最慢的SQL
  • -s c:按執(zhí)行次數(shù)排序(高頻低耗的SQL也可能導(dǎo)致CPU高)

2. 分析耗CPU SQL的執(zhí)行計(jì)劃

對(duì)找到的耗CPU SQL,使用EXPLAIN分析執(zhí)行計(jì)劃,看是否使用了索引、是否全表掃描:

-- 替換為實(shí)際的耗CPU SQL
EXPLAIN SELECT * FROM table_name WHERE condition;

-- 更詳細(xì)的執(zhí)行計(jì)劃(包含執(zhí)行成本)
EXPLAIN ANALYZE SELECT * FROM table_name WHERE condition;

重點(diǎn)關(guān)注

  • type列:如果是ALL(全表掃描),說(shuō)明未使用索引,是CPU高的常見(jiàn)原因
  • key列:顯示使用的索引,如果為NULL,說(shuō)明未使用索引
  • rows列:預(yù)估掃描的行數(shù),行數(shù)越多,CPU消耗越大

3. 檢查MySQL配置是否合理

不合理的配置也會(huì)導(dǎo)致CPU高,重點(diǎn)檢查以下參數(shù):

SHOW VARIABLES LIKE 'innodb_buffer_pool_size'; -- 緩沖池大?。ㄟ^(guò)小會(huì)導(dǎo)致磁盤(pán)IO高,間接引發(fā)CPU高)
SHOW VARIABLES LIKE 'max_connections';         -- 最大連接數(shù)(過(guò)多會(huì)導(dǎo)致線程切換消耗CPU)
SHOW VARIABLES LIKE 'query_cache%';            -- 查詢緩存(MySQL8.0已移除,開(kāi)啟后可能導(dǎo)致CPU高)
SHOW VARIABLES LIKE 'sort_buffer_size';        -- 排序緩沖區(qū)(過(guò)大導(dǎo)致內(nèi)存不足,頻繁換頁(yè))
SHOW VARIABLES LIKE 'join_buffer_size';        -- 連接緩沖區(qū)(同上)

4. 檢查系統(tǒng)層面的資源競(jìng)爭(zhēng)

CPU上下文切換:MySQL線程過(guò)多會(huì)導(dǎo)致CPU頻繁切換上下文,消耗CPU

# 查看上下文切換次數(shù)(數(shù)值過(guò)高說(shuō)明有問(wèn)題)
vmstat 1
# 查看MySQL進(jìn)程的線程數(shù)
pstree -p 1972827 | wc -l

磁盤(pán)IO:磁盤(pán)IO高會(huì)導(dǎo)致MySQL等待,間接拉高CPU(如swap使用、磁盤(pán)滿)

# 查看磁盤(pán)IO
iostat -x 1
# 查看swap使用情況
free -h

三、常見(jiàn)原因及解決方案

常見(jiàn)原因解決方案
無(wú)索引/索引失效為查詢字段添加合適的索引;檢查索引是否因數(shù)據(jù)類(lèi)型不匹配、函數(shù)操作失效
SQL寫(xiě)法差(如SELECT *)優(yōu)化SQL,只查詢需要的字段;避免子查詢、笛卡爾積;使用JOIN代替子查詢
高頻小查詢優(yōu)化SQL執(zhí)行次數(shù);增加緩存(如Redis);使用批量操作
連接數(shù)過(guò)多調(diào)整max_connections;排查應(yīng)用側(cè)是否有連接泄漏;使用連接池
配置不合理調(diào)整innodb_buffer_pool_size(建議為物理內(nèi)存的50%-70%);關(guān)閉查詢緩存
鎖競(jìng)爭(zhēng)(行鎖/表鎖)優(yōu)化事務(wù),縮短鎖持有時(shí)間;避免長(zhǎng)事務(wù);使用行鎖而非表鎖
MySQL版本問(wèn)題升級(jí)到穩(wěn)定版本(如5.7/8.0的最新小版本),修復(fù)已知的CPU高bug

四、長(zhǎng)期監(jiān)控:避免CPU高問(wèn)題復(fù)發(fā)

開(kāi)啟慢查詢?nèi)罩荆ㄓ谰蒙В?/strong>:
修改my.cnf/my.ini

slow_query_log = ON
slow_query_log_file = /var/lib/mysql/mysql-slow.log
long_query_time = 1
log_queries_not_using_indexes = ON

重啟MySQL生效:systemctl restart mysqld

使用監(jiān)控工具

  • Percona Toolkit:pt-query-digest分析慢查詢?nèi)罩荆?code>pt-stalk捕獲MySQL性能數(shù)據(jù)
  • Prometheus + Grafana:監(jiān)控MySQL CPU、內(nèi)存、QPS、慢查詢等指標(biāo)
  • MySQL自帶工具:mysqladmin status、SHOW ENGINE INNODB STATUS

定期優(yōu)化

  • 定期分析慢查詢?nèi)罩?,?yōu)化SQL和索引
  • 定期維護(hù)表(ANALYZE TABLE更新統(tǒng)計(jì)信息,OPTIMIZE TABLE整理碎片)
  • 監(jiān)控?cái)?shù)據(jù)庫(kù)增長(zhǎng),及時(shí)擴(kuò)容或分庫(kù)分表

總結(jié)

  1. 緊急排查:通過(guò)SHOW FULL PROCESSLIST定位耗CPU的MySQL線程和SQL,緊急情況下可KILL長(zhǎng)時(shí)間運(yùn)行的線程。
  2. 核心分析:開(kāi)啟慢查詢?nèi)罩?,?code>mysqldumpslow和EXPLAIN分析SQL執(zhí)行計(jì)劃,重點(diǎn)排查無(wú)索引、全表掃描、高頻查詢等問(wèn)題。
  3. 長(zhǎng)期優(yōu)化:優(yōu)化SQL和索引、調(diào)整MySQL配置、開(kāi)啟監(jiān)控,避免CPU高問(wèn)題復(fù)發(fā)。

以上就是查詢MySQL的CPU使用率突然變高的幾種方法的詳細(xì)內(nèi)容,更多關(guān)于查詢MySQL CPU使用率變高的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • navicat 8 for mysql建庫(kù)的方法

    navicat 8 for mysql建庫(kù)的方法

    在本篇文章里小編給大家分享的是關(guān)于navicat 8 for mysql建庫(kù)的方法以及相關(guān)知識(shí)點(diǎn),需要的朋友們參考學(xué)習(xí)下。
    2019-08-08
  • MySQL線程處于Opening tables的問(wèn)題解決方法

    MySQL線程處于Opening tables的問(wèn)題解決方法

    在本篇文章里小編給大家分享了關(guān)于MySQL線程處于Opening tables的問(wèn)題解決方法,有興趣的朋友們學(xué)習(xí)下。
    2019-01-01
  • MySQL8.0+版本1045錯(cuò)誤的問(wèn)題及解決辦法

    MySQL8.0+版本1045錯(cuò)誤的問(wèn)題及解決辦法

    這篇文章主要介紹了MySQL8.0+版本1045錯(cuò)誤解決辦法,使用命令行登錄MySQL報(bào)錯(cuò)1045 Access denied for user ‘root’@‘localhost’ (using password:YES),折騰半天才解決問(wèn)題,需要的朋友可以參考下
    2022-08-08
  • mysql 8.0.18 安裝配置方法圖文教程(linux)

    mysql 8.0.18 安裝配置方法圖文教程(linux)

    這篇文章主要介紹了linux下mysql 8.0.18 安裝配置方法圖文教程,文中安裝步驟介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • MySQL 5.7.17壓縮版安裝筆記

    MySQL 5.7.17壓縮版安裝筆記

    這篇文章主要介紹了MySQL 5.7.17壓縮版安裝筆記,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • Windows11下MySQL?8.0.29?安裝配置方法圖文教程

    Windows11下MySQL?8.0.29?安裝配置方法圖文教程

    這篇文章主要為大家詳細(xì)介紹了Windows11下MySQL?8.0.29?安裝配置方法圖文教程,文中安裝步驟介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • Mysql的timestamp時(shí)間戳詳解及2038問(wèn)題

    Mysql的timestamp時(shí)間戳詳解及2038問(wèn)題

    本文主要介紹了Mysql的timestamp時(shí)間戳詳解及2038問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • MySQL內(nèi)核探秘之主鍵與唯一鍵的深度解析以及設(shè)計(jì)哲學(xué)

    MySQL內(nèi)核探秘之主鍵與唯一鍵的深度解析以及設(shè)計(jì)哲學(xué)

    主鍵和唯一鍵都是用來(lái)保證MySQL數(shù)據(jù)表中數(shù)據(jù)完整性的約束,但它們?cè)诒举|(zhì)和使用上存在一些關(guān)鍵區(qū)別,這篇文章主要介紹了MySQL內(nèi)核探秘之主鍵與唯一鍵的深度解析以及設(shè)計(jì)哲學(xué)的相關(guān)資料,需要的朋友可以參考下
    2026-04-04
  • Ubuntu查看修改mysql的登錄名和密碼、安裝phpmyadmin

    Ubuntu查看修改mysql的登錄名和密碼、安裝phpmyadmin

    這篇文章主要介紹了Ubuntu查看修改mysql的登錄名和密碼、安裝phpmyadmin,本文分步驟給大家講解的非常詳細(xì),需要的朋友可以參考下
    2019-11-11
  • mysql中判斷記錄是否存在方法比較

    mysql中判斷記錄是否存在方法比較

    把數(shù)據(jù)寫(xiě)入到數(shù)據(jù)庫(kù)的時(shí),常常會(huì)碰到先要檢測(cè)要插入的記錄是否存在,然后決定是否要寫(xiě)入。
    2011-07-07

最新評(píng)論

象山县| 陆川县| 游戏| 龙陵县| 开原市| 唐河县| 镇康县| 衡水市| 通州区| 永仁县| 平阴县| 文山县| 宁海县| 曲周县| 三台县| 荆州市| 志丹县| 东乡县| 周至县| 灌阳县| 建瓯市| 托克托县| 汪清县| 齐齐哈尔市| 宁明县| 江陵县| 武山县| 丹江口市| 广饶县| 正镶白旗| 新泰市| 广平县| 江山市| 温泉县| 濮阳市| 阿勒泰市| 沙坪坝区| 齐齐哈尔市| 阜新市| 临湘市| 双流县|