慢查詢日誌是效能調優核心工具,記錄執行時間超過閾值或未使用索引的 SQL,助力發現效能瓶頸。
[mysqld]
slow_query_log=1
slow_query_log_file=/var/lib/mysql/slow.log
long_query_time=2 # 超過 2 秒記錄(預設 10 秒)
log_queries_not_using_indexes=1 # 記錄未用索引查詢
# log_throttle_queries_not_using_indexes=10 # 5.6+ 限流頻率(每分鐘)
# log_slow_admin_statements=1 # 記錄管理語句(ANALYZE, OPTIMIZE 等)
# log_slow_slave_statements=1 # 從庫慢查詢(5.6+)
[mysqld]
slow_query_log=1
slow_query_log_file=E:\mysql\log\slow.log
long_query_time=2
SET GLOBAL slow_query_log=1;
SET GLOBAL long_query_time=2;
SET GLOBAL log_queries_not_using_indexes=1;
# 按查詢次數排序 Top 20
mysqldumpslow -s c -t 20 /var/lib/mysql/slow.log
# 按總耗時排序 Top 20
mysqldumpslow -s t -t 20 /var/lib/mysql/slow.log
# 按返回行數排序 Top 20
mysqldumpslow -s r -t 20 /var/lib/mysql/slow.log
# 含 LEFT JOIN 的 Top 10 耗時查詢
mysqldumpslow -t 10 -s t -g "left join" /var/lib/mysql/slow.log
參數說明:-s 排序鍵(c=count, t=time, l=lock time, r=rows),前綴 a 為倒序;-t Top N;-g 正則過濾。
pt-query-digest /var/lib/mysql/slow.log --limit 20 --output json > report.json
# 或直接生成人類可讀報表
pt-query-digest /var/lib/mysql/slow.log --top 20
優勢:多維度統計、指紋分組、EXPLAIN 自動分析、JSON/HTML 輸出。
SHOW GLOBAL STATUS LIKE '%slow%';
+---------------------+-------+
| Variable_name | Value |
+---------------------+-------+
| Slow_launch_threads | 0 |
| Slow_queries | 123 |
+---------------------+-------+
Slow_queries 計數器可用於監控告警。
long_query_time=1 或 0.5;OLAP 可放寬至 5-10 秒。log_queries_not_using_indexes:但需配合 log_throttle_queries_not_using_indexes 限流,避免全表掃描刷爆日誌。logrotate 定期切割、壓縮、清理舊日誌。pt-query-digest 生成報表,納入效能基線追蹤。EXPLAIN 驗證執行計劃,優化索引或改寫 SQL。long_query_time 單位是毫秒 → 實為秒(支援微秒精度,如 0.05)。Query_time 忽略 Lock_time、Rows_sent、Rows_examined → 後三者對診斷鎖爭用、全表掃描同樣關鍵。SHOW PROCESSLIST 或 performance_schema 即時監控。