[mysqld]
long_query_time = 1
log-slow-queries = /var/log/mysql/slow.log
[mysqld]
long_query_time = 1
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
建議 **long_query_time = 1** (秒),捕捉 ≥ 1 秒的查詢。運行一段時間後**關閉**避免磁碟寫入壓力。
# Top 20 最常執行
mysqldumpslow -s c -t 20 /var/log/mysql/slow.log
# Top 20 返回行數最多
mysqldumpslow -s r -t 20 /var/log/mysql/slow.log
# Top 10 耗時最久且含 LEFT JOIN
mysqldumpslow -t 10 -s t -g "left join" /var/log/mysql/slow.log
| 參數 | 意義 | 倒序 (加 a) |
|---|---|---|
| c | 執行次數 | ac |
| t | 總耗時 | at |
| l | 鎖定時間 | al |
| r | 返回行數 | ar |
某電商訂單查詢 CPU 長期 90%+,Slow Log 顯示:
# Query_time: 12.3 Lock_time: 0.0 Rows_sent: 1 Rows_examined: 800000
SELECT * FROM orders WHERE buyer_email = 'x@y.com' AND status = 1;
`buyer_email` 無索引 → 全表掃描 80 萬行。加上複合索引 INDEX idx_email_status (buyer_email, status) 後,**Query_time 降至 0.002s,CPU 瞬間降至 10% 以下**。
Slow Log + mysqldumpslow + EXPLAIN = **MySQL 效能調優鐵三角**。建立「每日自動分析 Top 20 → 研發優化 → 驗證」機制,讓 CPU 100% 成為歷史。