top -p $(pgrep -d, mysqld)
# 關鍵欄位:
# %CPU - 計算密集 (差查詢、壓縮、加密)
# %MEM - 記憶體壓力
# VIRT/RES/SHR - 虛擬/實體/共享記憶體
# S (D=不可中斷睡眠=I/O 等待, R=運行)
dstat -dcnml # 磁碟、CPU、網路、記憶體、負載
# 或 nmon 互動模式 (c=CPU, d=Disk, n=Net, m=Mem)
iostat -x 2 # 裝置層面: %util, await, svctm, r/s, w/s
iotop -o # 進程層面 I/O 讀寫 (需 root)
# 基準測試:
dd if=/dev/zero of=/data/test bs=64k count=16k conv=fsync # 寫入速度
dd if=/data/test of=/dev/null bs=64k # 讀取速度
netstat -i 1 # 介面錯誤/丟包
iftop -P # 連線級流量 (S=顯示源埠, D=顯示目的埠)
mysqladmin -uroot -p ext -ri 1 | grep -i questions
# 或
SHOW GLOBAL STATUS LIKE 'Questions';
-- 當前鎖等待鏈 (需 5.7+ / 8.0)
SELECT
r.trx_id AS waiting_trx_id,
r.trx_mysql_thread_id AS waiting_thread,
r.trx_query AS waiting_query,
b.trx_id AS blocking_trx_id,
b.trx_mysql_thread_id AS blocking_thread,
b.trx_query AS 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
-- 找 "LATEST DETECTED DEADLOCK" 區塊
SHOW ENGINE INNODB STATUS\G
-- 重點關注:
-- SEMAPHORES: 信號量等待 (spin rounds, OS waits)
-- TRANSACTIONS: 活躍事務、鎖結構、Undo Log 數
-- FILE I/O: 讀寫執行緒、pending I/O
-- INSERT BUFFER AND ADAPTIVE HASH INDEX: 合併效率、AHI 命中
-- LOG: Log sequence number, flush 狀態, checkpoint age
-- BUFFER POOL AND MEMORY: 命中率、free buffers、dirty pages%
mysqlsla / pt-query-digest 分析 Slow Log。type (ALL/index/range/ref/eq_ref/const)、key、rows、Extra (Using where/index/temporary/filesort)。ANALYZE TABLE 更新 Cardinality,誤導優化器的常見原因。ORDER BY 消除 filesort。SHOW GLOBAL STATUS、INFORMATION_SCHEMA、OS 指標。Threads_connected > 80% max_connectionsInnodb_row_lock_waits > 0 (持續增長)Innodb_buffer_pool_wait_free > 0Seconds_Behind_Master > 30s (從庫延遲)Disk space < 20%| 現象 | 首檢指令 | 可能原因 |
|---|---|---|
| CPU 100% | top -H -p | 全表掃描、複雜排序、函數計算、壓縮 |
| IO 瓶頸 | iostat -x / iotop | Buffer Pool 過小、缺索引、Checkpoint 刷髒頁、Binlog sync |
| 鎖等待/死鎖 | innodb_lock_waits / SHOW ENGINE INNODB STATUS | 索引缺失導致間隙鎖升級、長事務、加鎖順序不一 |
| 記憶體暴增 | top / SHOW ENGINE INNODB STATUS (BUFFER POOL) | 排序緩衝、臨時表、Prepared Statement 洩漏、Memory 表 |
| 從庫延遲 | SHOW SLAVE STATUS\G (Seconds_Behind_Master) | 主庫並行大、從庫單線程重放、大事務、I/O 瓶頸 |
「指標先行、分層驗證、最小變更、持續觀測」
建立基線、配置告警、定期演練故障演練,讓效能問題在影響業務前被發現並解決。