萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 運維神器工具箱:從 vmstat 到 orzdba 的 12 款必備利器深度評測

系統級性能觀測三劍客

1. vmstat — 虛擬內存/CPU/IO 綜合視角

vmstat 2 3   # 間隔 2 秒,采樣 3 次

核心欄位:

  • r 運行隊列長度(>CPU 核心數即擁塞)
  • b 阻塞進程數
  • si/so 換入/換出內存(持續非 0 = 內存不足)
  • bi/bo 塊設備讀寫扇區數
  • in/cs 中斷/上下文切換(cs 高 = 線程過多/鎖競爭)
  • us/sy/id/wa 用戶/系統/空閒/IO等待 CPU%

2. iostat — 磁盤 I/O 微觀鏡頭

iostat -x 2 5   # 擴展統計,每 2 秒 5 次

黃金指標:

  • await 平均 I/O 等待時間(ms),含隊列 + 服務時間
  • svctm 設備服務時間,await >> svctm 表明隊列積壓
  • %util 接近 100% = 設備帶寬飽和
  • avgqu-sz 平均請求隊列長度

3. mpstat — 多核 CPU 負載不均檢測

mpstat -P ALL 2 3
  • 單核 %usr 高而其他核心閒置 → 應用無多線程或鎖競爭。
  • %iowait 高 → 磁盤子系統瓶頸。

網絡與綜合觀測

4. ifstat — 實時網卡吞吐

ifstat -t -i eth0 1

即時顯示 KB/s in/out,排查網絡飽和、異常流量。

5. dstat — 全能替代者(彩色、即時刷新、插件化)

dstat -cdlmnpsy 3  # cpu, disk, load, memory, net, paging, system, yaml輸出
alias dstat='dstat -cdlmnpsy'

一條命令覆蓋 vmstat/iostat/ifstat/mpstat,適合人工巡檢。

深度診斷利器

6. tcprstat — TCP 響應時間分布(MySQL 延遲分析神器)

./tcprstat -p 3306 -t 1 -n 10
# 輸出:timestamp count max min avg med stddev 95_max 95_avg 99_max...
  • 被動抓包分析 MySQL 協議交互,無側車干擾。
  • 定位「應用覺得慢」但 SHOW PROCESSLIST 看不出問題的情況。

7. tcpdump — 全包捕獲,還原現場

tcpdump -i eth0 -s 0 -l -w - dst 192.168.1.100 and port 3306 | strings
# 可見明文 SQL、握手包、錯誤包
  • 審計、異常 SQL 追蹤、協議分析。
  • 生產環境建議 -C 100 -W 10 切割文件,避免佔滿磁盤。

8. perf — 內核級熱點分析(2.6.31+)

perf top -p $(pidof mysqld)          # 實時函數級熱點
perf record -g -p $(pidof mysqld) -- sleep 30
perf report                          # 圖形化調用鏈
  • 定位「CPU 高但 SQL 正常」的內核/庫函數熱點(如 mutex、malloc、CRC32)。
  • 需安裝 perf、kernel-debuginfo 以獲得完整符號表。

MySQL 專用診斷工具

9. pt-stalk — 閾值觸發自動採集現場

pt-stalk --collect-tcpdump \
  --function status \
  --variable Threads_connected \
  --threshold 2500 \
  --daemonize \
  --user=root --host=127.0.0.1 --port=3306
  • 當 Threads_connected > 2500 連續 5 個週期,自動採集:SHOW ENGINE INNODB STATUS、SHOW PROCESSLIST、vmstat、iostat、tcpdump、GDB stack 等打包存入 /var/lib/pt-stalk。
  • 解決「問題閃現即逝、事後無現場」痛點。

10. orzdba — 淘寶 DBA 團隊出品的全能儀表板

./orzdba -lazy -rt -S /tmp/mysql.sock
# 輸出:load、cpu、swap、QPS/TPS、Hit%、tcprstat 響應時間分布

模組化設計:

  • -lazy:一屏核心指標(日常巡檢首選)。
  • -innodb:Buffer Pool、Redo Log、History List、鎖等深度指標。
  • -mysql:QPS、緩存命中、線程、臨時表等 Server 層指標。
  • -n eth0:網卡流量。

11. orztop — 實時 Processlist 可視化

orztop -h=192.168.1.100 -P=3306 -u=orztop -p=xxx -t=1
  • 類似 top 但針對 MySQL 線程,實時刷新 SHOW FULL PROCESSLIST,高亮長耗時 SQL。
  • 依賴 Perl DBI/DBD::mysql,輕量無侵入。

12. sysbench — 標準壓測基準

# 文件 IO 壓測
sysbench --test=fileio --file-total-size=10G --file-test-mode=rndrw \
  --max-time=3600 --max-requests=0 run

# OLTP 讀寫壓測
sysbench --db-driver=mysql --mysql-host=127.0.0.1 --mysql-port=3306 \
  --mysql-user=root --mysql-password=xxx --mysql-db=test \
  --tables=10 --table-size=1000000 --threads=64 --time=300 --report-interval=10 \
  oltp_read_write run

工具選型決策表

場景首選工具輔助工具
日常巡檢orzdba -lazydstat
CPU 飆高找兇手mpstat -P ALL / perf topvmstat
磁盤 IO 瓶頸iostat -xdstat -d
MySQL 響應抖動tcprstatpt-stalk 自動採集
疑難雜癥現場保留pt-stalk --daemonizetcpdump + perf
實時 SQL 監控orztopSHOW PROCESSLIST
容量規劃/壓測sysbenchgo-tpc / tpcc-mysql

總結

工具無銀彈,關鍵在於「會看懂指標、會串聯證據鏈」。建議 DBA 建立個人化 ~/.dstat_alias、~/.orzdba_preset,形成肌肉記憶;線上故障時,先 orzdba -lazy 定性,再 pt-stalk 鎖定現場,最後 perf/tcpdump 深度溯源,做到有據可查、有據可依。

copyright © 萬盛學電腦網 all rights reserved