mysql的cpu使用率100%問題排查

背景

線上mysql服務器經常性出現cpu使用率100%的告警, 因此整理一下排查該問題的常規流程。


1. 確認CPU占用來源

  • 檢查系統進程
    使用 tophtop 命令,確認是否是 mysqld 進程導致CPU滿載:
    top -c -p $(pgrep mysqld)
    

2. 實時分析MySQL活動

  • 查看當前運行的SQL
    登錄MySQL,執行以下命令,觀察是否有長時間運行或高頻率的查詢:
    SHOW FULL PROCESSLIST;
    -- 或過濾非空閑連接
    SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST 
    WHERE COMMAND != 'Sleep' AND TIME > 0;
    

  • 終止問題查詢
    若發現異常查詢,可通過 KILL [PROCESS_ID] 終止。

3. 分析慢查詢與執行計劃

  • 啟用慢查詢日志
    在MySQL配置文件(my.cnf/my.ini)中啟用慢查詢日志:

    slow_query_log = 1
    slow_query_log_file = /var/log/mysql/slow.log
    long_query_time = 2  -- 閾值(秒)
    

    重啟MySQL后,使用 mysqldumpslowpt-query-digest 分析日志。

  • 使用 EXPLAIN 分析SQL
    對可疑查詢添加 EXPLAIN,檢查是否缺少索引或全表掃描:

    EXPLAIN SELECT * FROM your_table WHERE your_condition;
    

4. 檢查索引與表結構

  • 索引缺失
    通過 SHOW CREATE TABLE 檢查表結構,確保高頻查詢字段有索引。
  • 冗余索引
    使用 pt-duplicate-key-checker 工具刪除無效索引。
  • 統計信息過時
    執行 ANALYZE TABLE your_table; 更新統計信息。

5. 排查鎖爭用與事務

  • 查看當前鎖狀態
    SHOW ENGINE INNODB STATUS;  -- 查看LATEST DETECTED DEADLOCK
    SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;  -- 運行中的事務
    SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;  -- 當前持有的鎖
    
  • 長事務處理
    終止未提交的長事務或優化事務代碼。

6. 檢查MySQL配置

  • 關鍵參數調優
    • innodb_buffer_pool_size:建議設置為物理內存的70%-80%。
    • max_connections:避免過高導致資源爭用。
    • tmp_table_sizemax_heap_table_size:減少磁盤臨時表。
  • 連接數監控
    SHOW STATUS LIKE 'Threads_connected';  -- 當前連接數
    SHOW VARIABLES LIKE 'max_connections';  -- 最大允許連接數
    

7. 系統資源與硬件瓶頸

  • 內存與交換分區
    使用 free -hvmstat 檢查內存是否不足,導致頻繁Swap。
  • 磁盤I/O
    使用 iostatiotop 查看磁盤負載,優化高I/O操作(如批量寫入、索引重建)。
  • CPU架構
    確認是否因并發線程過多導致CPU爭用(如 innodb_thread_concurrency 設置)。

8. 其他可能原因

  • 復制問題
    主從復制延遲或錯誤可能導致從庫CPU升高,檢查 SHOW SLAVE STATUS
  • 緩存失效
    如查詢緩存(query_cache_type)頻繁失效,考慮關閉。
  • 日志寫入壓力
    關閉不必要的日志(如通用查詢日志),或調整 sync_binlog 參數。

9. 使用專業工具

  • 監控工具
    Percona Monitoring and Management (PMM)、VividCortex 或 Prometheus + Grafana。
  • 性能分析工具
    pt-query-digestmysqlsla 或 MySQL自帶的 Performance Schema

快速處理步驟

  1. top 確認MySQL進程導致CPU滿載。
  2. SHOW PROCESSLIST 查找異常查詢。
  3. EXPLAIN 分析問題SQL,優化索引或查詢邏輯。
  4. 終止阻塞進程(KILL)或重啟MySQL(臨時恢復)。

通過以上步驟,多數情況下可以定位到CPU過高的根本原因,如慢查詢、索引缺失、配置不當或硬件瓶頸,進而針對性優化。若問題復雜,建議結合監控工具長期跟蹤分析。

最后

歡迎點擊關注gzh: 加瓦點燈,不錯過每一次的干貨!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/894875.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/894875.shtml
英文地址,請注明出處:http://en.pswp.cn/news/894875.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

人工智能賦能企業系統架構設計:以ERP與CRM系統為例

一、引言 1.1 研究背景與意義 在數字化時代,信息技術飛速發展,人工智能(Artificial Intelligence, AI)作為一項具有變革性的技術,正深刻地影響著各個領域。近年來,AI 在技術上取得了顯著突破,…

使用jmeter進行壓力測試

使用jmeter進行壓力測試 jmeter安裝 官網安裝包下載,選擇二進制文件,解壓。 tar -xzvf apache-jmeter-x.tgz依賴jdk安裝。 yum install java-1.8.0-openjdk環境變量配置,修改/etc/profile文件,添加以下內容。 export JMETER/…

深入理解流(Streams)—— 聲明式數據處理的藝術

1. 引言 大家好!歡迎來到本系列博客的第三篇。在前兩篇文章中,我們已經領略了 Java 8 中 行為參數化 和 Lambda 表達式 的魅力。 在第 1 章 Java行為參數化:從啰嗦到簡潔的代碼進化中,我們了解到如何通過將行為(代碼…

【Linux】之【Get√】nmcli device wifi list 與 wpa_cli scan 和 wpa_cli scan_result 區別

nmcli device wifi list 是 NetworkManager 的命令行工具 nmcli 的一部分,它用于列出當前可用的無線網絡。它的作用和 wpa_cli 的掃描功能類似,但有一些不同點。 1. nmcli device wifi list 功能: nmcli device wifi list 命令用于顯示當前…

【藍橋杯嵌入式】6_定時器輸入捕獲

全部代碼網盤自取 鏈接:https://pan.baidu.com/s/1PX2NCQxnADxYBQx5CsOgPA?pwd3ii2 提取碼:3ii2 這是兩個信號發生器,可以通過調節板上的兩個電位器R39和R40調節輸出頻率。 將PB4、PA15選擇ch1,兩個信號發生器只能選擇TIM3和TIM…

詳解SQLAlchemy的函數relationship

在 SQLAlchemy 中,relationship 是一個非常重要的函數,用于定義模型之間的關系。它用于在 ORM 層面上表示數據庫表之間的關聯關系(如 1 對 1、1 對多和多對多)。relationship 的主要作用是提供一個高級接口,用于在模型…

分桶函數的使用

除了 NTILE 函數,SQL 中還有其他一些與 分桶(bucketization)相關的函數,雖然它們的實現方式不同,但都涉及將數據分成多個區間或組。以下是一些常用的分桶函數: 1. CASE 語句 雖然 CASE 不是開窗函數&…

iOS 音頻錄制、播放與格式轉換

iOS 音頻錄制、播放與格式轉換:基于 AVFoundation 和 FFmpegKit 的實現 在 iOS 開發中,音頻處理是一個非常常見的需求,比如錄音、播放音頻、音頻格式轉換等。本文將詳細解讀一段基于 AVFoundation 和 FFmpegKit 的代碼,展示如何實現音頻錄制、播放以及 PCM 和 AAC 格式之間…

數據結構與算法(test1)

一、樹和二叉樹 1. 看圖,完成以下填空 (1).樹的度為________。 (2).樹中結點的最大層次,稱為樹的_____或樹的______,值是______。 (3).結點A和B的度分別為________ 和 ________。 (4).結點A是結點B的________。 (5).結點B是結點A的________…

新版AndroidStudio 修改 jdk版本

一、問題 之前,在安卓項目中配置JDK和Gradle的過程非常直觀,只需要進入Android Studio的File菜單中的Project Structure即可進行設置,十分方便。 如下圖可以在這修改JDK: 但是升級AndroidStudio之后,比如我升級到了Android Stu…

litemall,又一個小商場系統

litemall Spring Boot后端 Vue管理員前端 微信小程序用戶前端 Vue用戶移動端 代碼地址:litemall: 又一個小商城。 litemall Spring Boot后端 Vue管理員前端 微信小程序用戶前端 Vue用戶移動端

cursor 開發java項目教程簡單上手

1.官網下載 Cursor - The AI Code Editor 下載完后注冊賬號,可以使用無限郵的方式 注冊完之后 設置中文 可以選擇設置為中文 Ctrl Shift X 進入設置頁面輸入chinese 然后重啟 更改jdk跟maven倉庫設置 ctrlshiftp 打開輸入框后輸入json,把下面代碼…

安裝和使用 Ollama(實驗環境windows)

下載安裝 下載 https://ollama.com/download/windows 安裝 Windows 安裝 如果直接雙擊 OllamaSetup.exe 安裝,默認會安裝到 C 盤,如果需要指定安裝目錄,需要通過命令行指定安裝地址,如下: # 切換到安裝目錄 C:\Use…

[原創](Modern C++)現代C++的關鍵性概念: 文件編碼細節之一:BOM(Byte Order Mark, 字節順序標記)

常用網名: 豬頭三 出生日期: 1981.XX.XX 企鵝交流: 643439947 個人網站: 80x86匯編小站 編程生涯: 2001年~至今[共24年] 職業生涯: 22年 開發語言: C/C、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 開發工具: Visual Studio、Delphi、XCode、Eclipse、C Bui…

LQB(0)-python-基礎知識

一、Python開發環境與基礎知識 python解釋器:用于解釋python代碼 方式: 1.直接安裝python解釋器 2.安裝Anaconda管理python環境 python開發環境:用于編寫python代碼 1.vscode 2.pycharm # 3.安裝Anaconda后可以使用網頁版的jupyter n…

C# 中記錄(Record)詳解

從C#9.0開始,我們有了一個有趣的語法糖:記錄(record)   為什么提供記錄? 開發過程中,我們往往會創建一些簡單的實體,它們僅僅擁有一些簡單的屬性,可能還有幾個簡單的方法,比如DTO等等&#xf…

使用 CSS 實現透明效果

在 CSS 中,實現透明效果有幾種方法,具體使用哪種方法取決于具體需求。以下是一些常見的方法: 使用 opacity 屬性: opacity 屬性可以設置整個元素的透明度,包括其所有的子元素。 .transparent { opacity: 0.5; /* 0 表…

MS17-010(永恒之藍1.0)漏洞遠程控制win7系統操作實戰小白通俗易懂

1.準備環境win7操作系統(被攻擊機)以及kali系統(攻擊機),kali使用msf工具進行攻擊。 2.打開kali終端,進入msf,輸入msfconsole然后等待啟動。 ┌──(root?kali-chifan)-[~] └─# msfconsole…

C語言:函數棧幀的創建和銷毀

目錄 1.什么是函數棧幀2.理解函數棧幀能解決什么問題3.函數棧幀的創建和銷毀的過程解析3.1 什么是棧3.2 認識相關寄存器和匯編指令3.3 解析函數棧幀的創建和銷毀過程3.3.1 準備環境3.3.2 函數的調用堆棧3.3.3 轉到反匯編3.3.4 函數棧幀的創建和銷毀 1.什么是函數棧幀 在寫C語言…

25/2/6 <機器人基礎> 運動學中各連桿的變換矩陣求法

變換矩陣 機器人通常包含多個關節和連桿,每個關節和連桿都有自己的局部坐標系。變換矩陣能夠將一個點或向量從一個坐標系轉換到另一個坐標系,從而實現對機器人各個部件位置和姿態的統一描述 變換矩陣能夠將復雜的運動分解為旋轉和平移的組合。通過矩陣乘…