首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 調優基礎(一):CPU 架構、進程調度與 Linux 性能分析實戰

     編輯:MySQL 綜合教學

MySQL 調優基礎(一):CPU 架構、進程調度與 Linux 性能分析實戰

MySQL 調優非單一維度,需具備「硬體 → 作業系統 → 資料庫」全棧認知。本文聚焦 CPU 與進程層面:NUMA/SMP 架構差異、Linux 進程生命週期、上下文切換、中斷處理、Load Average 真實含義,以及 top/vmstat/mpstat/ps/strace 實戰分析技巧。

一、CPU 架構:SMP vs NUMA

架構全稱記憶體訪問優點缺點
SMPSymmetric Multi-Processing所有 CPU 共享總線訪問統一記憶體資源共享、編程簡單CPU 核數多時總線爭用劇烈、擴展性差
NUMANon-Uniform Memory AccessCPU 分組為 Node,各 Node 綁定本地記憶體,跨 Node 訪問需 Interconnect解決總線瓶頸、支援大規模 CPU本地/遠端訪問延遲不均、調度複雜

NUMA 關鍵參數與調優

  • numactl --hardware 查看 Node 拓撲;
  • 記憶體分配策略:localalloc(預設,僅本 Node)→ 易導致 Swap;interleave(輪詢所有 Node)→ 生產環境推薦,虛擬化為均勻共享記憶體,避免 Swap 性能崩潰;
  • CPU 綁定策略:cpunodebind(指定 Node)、physcpubind(指定核心);
  • MySQL 啟動建議:numactl --interleave=all mysqld_safe ... 或 BIOS 關閉 NUMA(視工作負載測試決定)。

二、Linux 進程核心概念

生命週期與系統調用

  1. fork():父進程複製產生子進程(Copy-on-Write 頁表);
  2. exec():子進程載入新程式映像;
  3. exit():子進程退出進入 ZOMBIE 狀態;
  4. wait():父進程回收子進程資源。

線程:輕量級進程 (LWP)

  • 共享進程地址空間、檔案描述符、信號處理器;
  • pthread_create() 對應 clone(CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND);
  • MySQL 採用多線程架構,單進程多線程。

進程狀態機

Load Average 計算包含 TASK_RUNNING + TASK_UNINTERRUPTIBLE,故 I/O 密集型負載也會推高 LA。

Nice 值與優先級

  • 範圍 -20 (最高) ~ 19 (最低),預設 0;
  • renice -n -10 -p PID 提升優先級(需 root);
  • 非關鍵後台任務可 renice +10 降低爭搶。

三、性能分析工具實戰

1. top:全景式 CPU/記憶體/進程觀測


top - 14:35:55 up 25 min, 4 users, load average: 0.10, 0.07, 0.14
Tasks: 92 total, 1 running, 91 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0%us, 1.7%sy, 0.0%ni, 97.7%id, 0.0%wa, 0.3%hi, 0.3%si, 0.0%st
  • 第 1 行:load average 1/5/15 分鐘平均活躍進程數(含不可中斷睡眠);
  • 第 3 行:us 用戶態、sy 內核態、wa I/O 等待、hi/si 硬/軟中斷、st 虛擬化偷佔;
  • 進程列:VIRT/RES/SHR、%CPU、%MEM、S 狀態;
  • top -H 顯示線程級視圖(MySQL 線程數可見)。

2. vmstat:系統級吞吐與切換統計


vmstat 2
procs - r: 就緒隊列長度, b: 不可中斷睡眠
memory - swpd/free/buff/cache
swap - si/so: 換入/換出 (KB/s)
io - bi/bo: 塊設備讀/寫
system - in: 中斷/秒, cs: 上下文切換/秒
cpu - us/sy/id/wa/st
  • r 持續 > CPU 核數 → CPU 瓶頸;
  • cs (context switch) 高 → 鎖爭用/線程過多;
  • in 高 → 中斷風暴(網卡/時鐘/磁盤)。

3. mpstat:多核 CPU 逐核利用率


mpstat -P ALL 2

發現單核熱點(如中斷親和性未配置、單線程熱點)。

4. ps -mp PID -o THREAD,pmem,rss,vsz,tid,pid:MySQL 線程級 CPU 分析


pidof mysqld
ps -mp 2412 -o THREAD,pmem,rss,vsz,tid,pid
# 定位高 CPU 線程 TID,轉十六進制對應 pstack/gdb 分析

5. strace:系統調用跟蹤定位阻塞點


strace -aef -p  -o mysql_trace.log
# 分析 futex、poll、read/write、nanosleep 等調用分佈

四、CPU 瓶頸調優策略

  1. 工具確認瓶頸類型:us 高 → SQL/邏輯優化;sy 高 → 系統調用/鎖/中斷;wa 高 → I/O 子系統;
  2. 識別高佔用進程/線程 → SHOW PROCESSLIST 定位慢 SQL → 改寫/加索引/下推從庫;
  3. 非關鍵進程 renice 降級或 cron 錯峰執行;
  4. 中斷親和性綁核(/proc/irq/*/smp_affinity);
  5. 升級 CPU/調整 NUMA 策略/綁核部署。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
狀態含義是否佔用 CPU
TASK_RUNNING運行中或就緒隊列等待是
TASK_INTERRUPTIBLE可中斷睡眠(等待條件/信號)否
TASK_UNINTERRUPTIBLE不可中斷睡眠(通常為磁盤 I/O)否(但系統在為其工作)
TASK_STOPPED收到 SIGSTOP/SIGTSTP 暫停否
TASK_ZOMBIE退出等待父進程回收否