慢查詢日志記錄超時/無索引 SQL,mysqldumpslow 可快速聚合分析,找出高頻、高耗時、大結果集語句。
[mysqld]
long_query_time = 1
log-slow-queries = /var/log/mysql/slow.log
log-queries-not-using-indexes
運行一段時間後關閉,避免持續 I/O 開銷。
| 參數 | 含義 |
|---|---|
-s c/t/l/r | 按查詢次數/時間/鎖時間/返回行數排序(加 a 如 -s at 為倒序) |
-t N | 顯示前 N 條 |
-g "pattern" | 正則過濾(如 left join),大小寫不敏感 |
# 高頻 TOP20
mysqldumpslow -s c -t 20 host-slow.log
# 大結果集 TOP20
mysqldumpslow -s r -t 20 host-slow.log
# 耗時 TOP10 且含 LEFT JOIN
mysqldumpslow -t 10 -s t -g "left join" host-slow.log
| 指標異常 | 典型原因 | 優化動作 |
|---|---|---|
| 高頻 | 應用層重複查詢、N+1 問題 | 合併查詢、緩存、批量接口 |
| 高耗時 | 全表掃描、缺失索引、複雜 JOIN | 加索引、改寫 SQL、分表 |
| 大結果集 | 缺乏分頁、不必要的 SELECT * | 加 LIMIT、列裁剪、游標分頁 |
| 高鎖時間 | 長事務、熱點行更新 | 縮短事務、樂觀鎖、分庫分表 |
pt-query-digest(Percona Toolkit)獲得更豐富的統計維度。long_query_time 建議設為 1-2 秒,根據業務基線調整。