面對 MySQL 變慢、卡頓,遵循「由外而內、由粗到細」7 步驟標準化定位,快速鎖定瓶頸層級。
top -c # 關注:Load Average ≤ CPU 核心數、%us/%sy/%wa、%MEM、SWAP 使用率
netstat -i 1 # 觀察 RX-ERR/TX-ERR/DROP 是否遞增
iftop -n -B # 按 S/D 切換顯示本端/遠端埠,鎖定大流量連線
iostat -x 2 # 關注 %util、await、svctm、r/s+w/s
iotop -o # 僅顯示正在做 IO 的進程
# 基準測試 (需在維護窗口)
dd if=/dev/zero of=/data/test bs=64k count=16k conv=fsync # 寫入 ~565 MB/s (EMC 參考)
dd if=/data/test of=/dev/null bs=64k # 讀取 ~675 MB/s
mysqladmin -uroot -P3309 ext -ri 1 | grep -i questions
# 每秒 Questions (含 SELECT) 增長率
SELECT r.trx_id waiting_trx_id, r.trx_mysql_thread_id waiting_thread,
r.trx_query waiting_query,
b.trx_id blocking_trx_id, b.trx_mysql_thread_id blocking_thread,
b.trx_query blocking_query
FROM information_schema.innodb_lock_waits w
JOIN information_schema.innodb_trx b ON b.trx_id = w.blocking_trx_id
JOIN information_schema.innodb_trx r ON r.trx_id = w.requesting_trx_id\G
SHOW ENGINE INNODB STATUS\G
-- 關注:SEMAPHORES (信號量等待)、TRANSACTIONS (活躍事務)、
-- FILE I/O (AIO 執行緒)、BUFFER POOL (命中率、髒頁比例)、
-- LOG (LSN、flush 狀態)
mysql_global_status、mysql_global_variables、mysql_innodb_metrics。