慢查詢日誌(Slow Query Log)是 MySQL 效能調優的金鑰數據來源。人工逐行閱讀不僅效率低,極易漏掉高頻、高耗時模式。官方 mysqldumpslow 與社區 mysqlsla 是兩大經典分析工具,各有優勢。
# 按查詢次數排序(-s c)
mysqldumpslow -s c /var/lib/mysql/slow.log
# 按總耗時排序(-s t)
mysqldumpslow -s t /var/lib/mysql/slow.log
# 按平均耗時排序(-s at)
mysqldumpslow -s at /var/lib/mysql/slow.log
# 顯示前 20 筆
mysqldumpslow -s c -t 20 /var/lib/mysql/slow.log
| 欄位 | 含義 |
|---|---|
| Count | 該模式 SQL 出現次數 |
| Time | 總耗時 / 平均 / 最小 / 最大 |
| Lock | 鎖等待總時間 |
| Rows | 回傳行數 / 掃描行數總計 |
| Abstracted Query | 參數化後的 SQL 模式(如 LIMIT N, N) |
wget https://hackmysql.com/scripts/mysqlsla-2.03.tar.gz
tar zxf mysqlsla-2.03.tar.gz
cd mysqlsla-2.03
perl Makefile.PL
make && make install
# 基本分析
mysqlsla /var/lib/mysql/slow.log
# 指定排序:總耗時、平均耗時、查詢次數、鎖時間
mysqlsla -sort t_sum /var/lib/mysql/slow.log
# 過濾特定資料庫
mysqlsla -db mydb /var/lib/mysql/slow.log
# 輸出格式:報表、CSV、HTML
mysqlsla -of html /var/lib/mysql/slow.log > report.html
| 指標 | 業務含義 | 調優啟示 |
|---|---|---|
| Count / % | 出現次數與佔比 | 高頻慢查詢優先優化,ROI 最高 |
| Time (sum/avg/min/max) | 多維度耗時統計 | 關注 avg 與 max 差距大的查詢(不穩定) |
| 95% of Time | 去極值後 95% 覆蓋率耗時 | 更真實反映典型效能,排除極端值干擾 |
| Lock Time | 鎖等待時間 | 高鎖時間提示索引缺失、鎖衝突、長事務 |
| Rows sent / examined | 回傳行數 vs 掃描行數 | Rows examined >> Rows sent 典型全表掃描特徵 |
| Database / Users | 來源資料庫與用戶/ IP | 定責到具體業務模組與調用方 |
| Query abstract | 參數化 SQL 模式 | 快速定位問題查詢類型 |
| Query sample | 實際 SQL 範例(含具體參數) | 可直接複製 EXPLAIN 分析執行計劃 |
| 場景 | 推薦工具 | 理由 |
|---|---|---|
| 快速巡檢、無安裝權限環境 | mysqldumpslow | 開箱即用、輕量 |
| 深度調優、需要具體 SQL 範例 | mysqlsla | 多維統計、樣本 SQL、可匯出報表 |
| 持續化監控、自動化報表 | mysqlsla + crontab / pt-query-digest | 支援批次處理、多格式輸出 |
| 現代化替代方案 | Percona Toolkit pt-query-digest | 功能更全、維護更活躍、支援 JSON 輸出 |
slow_query_log=ON、long_query_time=1(或更低)、log_queries_not_using_indexes=ONmysqlsla -sort t_sum slow.log | head -100 定位 Top 10Query sample 複製真實 SQLEXPLAIN SELECT ... 檢查 type、key、rows、Extramysqlsla 近年維護較少,Percona Toolkit 的 pt-query-digest 是目前社區標準:
# 安裝
yum install percona-toolkit # 或下載二進制
# 使用
pt-query-digest /var/lib/mysql/slow.log
pt-query-digest --since "2h ago" --until "now" --output json slow.log > digest.json
優勢:支援多種日誌格式(慢查詢、General Log、Binlog、TCP 抓包)、JSON 輸出易於整合監控系統、積極維護與文件完善。