工具對比總表
| 工具 | 語言 | 核心功能 | 優點 | 缺點 | 推薦指數 |
| mysqldumpslow | Perl (官方內建) | 聚合相似 SQL、統計 Count/Time/Lock/Rows、抽象化 LIMIT 值 | 無依賴、輕量、標準輸出易腳本處理 | 無視覺化、無 EXPLAIN 整合、功能基礎 | ⭐⭐⭐ |
| mysqlsla | Perl | 多維度報表 (頻率/資料量/耗時/鎖/用戶/抽象 SQL/樣本 SQL)、支援多種排序、過濾 | 功能最強、報表豐富、支援自訂輸出格式 | 依賴較多 Perl 模組、輸出冗長、專案較久未更新 | ⭐⭐⭐⭐⭐ |
| mysql-explain-slow-log | Perl | 逐條 EXPLAIN、顯示執行計劃 | 直接看到優化器決策 | 輸出噪音大 (全列印 SQL)、統計僅計數、維護停止 | ⭐⭐ |
mysqldumpslow 實戰用法
# 基本:前 10 筆最耗時
mysqldumpslow -t 10 -s t /var/log/mysql/mysql-slow.log
# 依總耗時排序 (at)
mysqldumpslow -s at -t 20 /var/log/mysql/mysql-slow.log
# 依查詢次數排序 (c)
mysqldumpslow -s c -t 20 /var/log/mysql/mysql-slow.log
# 依鎖等待時間排序 (l)
mysqldumpslow -s l -t 10 /var/log/mysql/mysql-slow.log
# 依掃描行數排序 (r)
mysqldumpslow -s r -t 10 /var/log/mysql/mysql-slow.log
# 只看特定資料庫
mysqldumpslow -d db_name /var/log/mysql/mysql-slow.log
mysqlsla 進階範例
# 完整報表 (HTML 輸出)
mysqlsla --log-type=slow --top-number=20 --sort=t_sum /var/log/mysql/mysql-slow.log > report.html
# 只看特定用戶
mysqlsla --log-type=slow --user=app_user /var/log/mysql/mysql-slow.log
# 匯出 CSV 供 Excel 分析
mysqlsla --log-type=slow --format=csv /var/log/mysql/mysql-slow.log > slow.csv
輸出報表關鍵欄位解讀 (mysqlsla)
- Count:該 SQL 模式出現次數 / 佔總比。
- Time:總/平均/最小/最大/中位數耗時、佔總耗時比。
- 95% of Time:去極值後 95% 覆蓋率耗時分布。
- Lock Time:鎖等待統計。
- Rows sent / examined:回傳 vs 掃描行數,比值越大越可能全表掃描。
- Query abstract:參數化後的 SQL 模板 (如
SELECT * FROM t WHERE id = N)。
- Query sample:實際執行的完整 SQL 範例。
選型建議
- 日常快速巡檢 →
mysqldumpslow -s at -t 20。
- 深度優化分析 →
mysqlsla 產出 HTML/CSV 給團隊研討。
- 自動化巡檢腳本 → 解析
mysqldumpslow 輸出,超過閾值發送告警。
- 8.0+ 環境 → 考慮
sys.schema_table_statistics、performance_schema.events_statements_summary_by_digest 原生替代。