-- 1. 查看默認慢查詢閾值 (10秒)
SHOW VARIABLES LIKE '%long%';
-- long_query_time: 10.000000
-- 2. 修改閾值 (建議 1-5 秒,生產建議 2 秒)
SET GLOBAL long_query_time = 2;
-- 當前會話立即生效: SET SESSION long_query_time = 1;
-- 3. 查看慢查詢狀態
SHOW VARIABLES LIKE '%slow%';
-- log_slow_queries: OFF (舊參數名)
-- slow_query_log: OFF (新參數名,5.1+)
-- slow_query_log_file: /var/lib/mysql/hostname-slow.log
-- 4. 開啟慢查詢日誌 (需 GLOBAL)
SET GLOBAL slow_query_log = 'ON';
-- 驗證
SHOW VARIABLES LIKE '%slow%';
-- slow_query_log: ON
# /etc/my.cnf 或 /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
# 慢查詢配置
slow_query_log = 1
slow_query_log_file = /var/lib/mysql/mysql-slow.log
long_query_time = 2 # 秒,支持微秒如 0.5
log_queries_not_using_indexes = 1 # 記錄未用索引查詢 (慎開,量大)
# log_throttle_queries_not_using_indexes = 100 # 限流 (5.6+)
min_examined_row_limit = 100 # 忽略掃描行數 < 100 的查詢 (減少噪音)
重啟生效**:
sudo systemctl restart mysql
# 注意:某些環境 reload 不生效,必須 restart
| 工具 | 特點 | 安裝/使用 |
|---|---|---|
| mysqldumpslow | 官方自帶,按查詢模式聚合統計 | mysqldumpslow -s t -t 10 /var/lib/mysql/mysql-slow.log (按時間排序顯示前 10) |
| pt-query-digest (Percona Toolkit) | **最強分析器**,多維度報告、歷史趨勢、索引建議 | pt-query-digest /var/lib/mysql/mysql-slow.log --limit 20 --since '2h ago' |
| mysqlsla | 老牌分析工具,輸出 HTML 報表 | 較老,漸少維護 |
| Grafana + Loki/Promtail | 現代化可視化、告警、日誌聚合 | 需部署監棧 |
-s <排序方式> : t(時間)、c(次數)、l(鎖定時間)、r(返回行數) 默認 t
-t : 顯示前 N 條
-g <正則> : 只分析匹配模式的查詢
--verbose : 顯示完整 SQL
輸出含:
min_examined_row_limit 和 log_throttle_queries_not_using_indexeslogrotate 配置每日/按大小切割,保留 30 天