首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 慢查詢日誌開啟與分析:定位效能瓶頸的標準流程

     編輯:MySQL 資料庫相關知識

動態開啟(無需重啟)

SET GLOBAL slow_query_log = ON;
SET GLOBAL long_query_time = 3;  -- 秒,執行時間超過 3 秒記錄

-- 可選:記錄未使用索引的查詢
SET GLOBAL log_queries_not_using_indexes = ON;

永久配置(my.cnf)

[mysqld]
slow_query_log = ON
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
log_queries_not_using_indexes = ON
# 可選:微秒精度
log_slow_admin_statements = ON
log_slow_slave_statements = ON

查看日誌檔案位置

SHOW VARIABLES LIKE 'slow_query_log_file';
-- 例:/var/lib/mysql/host-slow.log

分析工具

1. mysqldumpslow(官方內建)

# 前 10 慢查詢,按總耗時排序
mysqldumpslow -s t -t 10 /var/log/mysql/slow.log

# 按查詢次數排序
mysqldumpslow -s c -t 10 /var/log/mysql/slow.log

# 含抽象化參數(去除具體值)
mysqldumpslow -a -s t -t 20 /var/log/mysql/slow.log

2. pt-query-digest(Percona Toolkit,推薦)

pt-query-digest /var/log/mysql/slow.log --limit 20 --output json > digest.json
# 輸出報告含:執行次數、總時間、平均時間、Rows examined、Rows sent、查詢抽象、EXPLAIN 計劃

3. 手工分析關鍵指標

指標關注閾值優化方向
Query_time> 1s索引、SQL 改寫、分頁優化
Lock_time> 0.1s鎖競爭、長事務、隔離級別
Rows_examined / Rows_sent> 100:1全表掃描、索引失效、覆蓋索引
Rows_affected大量寫入批次提交、延遲索引維護

完整排查流程

  1. 開啟慢查詢日誌(動態或配置檔)。
  2. 運行業務高峰期 30-60 分鐘收集樣本。
  3. 用 pt-query-digest 生成 TOP 20 報告。
  4. 對每條 TOP SQL:EXPLAIN、檢查索引、評估改寫方案。
  5. 驗證優化後效果,關閉或調整 long_query_time 歸檔。

注意事項

  • ⚠️ 慢查詢日誌本身有 I/O 開銷,生產環境建議 long_query_time >= 1。
  • ⚠️ log_queries_not_using_indexes 會產生大量噪音,短期診斷用,長期關閉。
  • ⚠️ 日誌輪轉:配置 logrotate 避免磁碟佔滿。
  • ✅ 5.7+ 支援 sys.schema_table_statistics、sys.statements_with_runtimes_in_95th_percentile 等視圖,輔助分析。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved