首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 慢查詢日誌完整配置指南:啟用、格式解析、分析工具與生產最佳實踐

     編輯:MySQL 綜合教學

慢查詢日誌三大核心開關

變數作用建議值動態修改
slow_query_log總開關ONSET GLOBAL slow_query_log = ON;
long_query_time閾值(秒),超過記錄1 (生產) / 0.1 (分析期)SET GLOBAL long_query_time = 1;
log_queries_not_using_indexes記錄未用索引查詢ON (慎用,量大)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 = 1
log_queries_not_using_indexes = ON
log_output = FILE
# 可選:限制日誌大小,配合 logrotate

注意: 動態修改 long_query_time 需重新連接生效。log_queries_not_using_indexes=ON 會產生海量日誌,磁碟易寫滿,建議僅分析期短期開啟,或配合 log_throttle_queries_not_using_indexes (5.6+) 限流。

慢查詢日誌格式深度解析


# Time: 2024-01-15T10:30:45.123456Z
# User@Host: app_user[app_user] @ 10.0.1.5 [10.0.1.5] Id: 12345
# Query_time: 2.345678  Lock_time: 0.000123  Rows_sent: 100  Rows_examined: 1000000
# Rows_affected: 0  Bytes_sent: 12345
SET timestamp=1705315845;
SELECT * FROM huge_table WHERE status = 1 ORDER BY create_time LIMIT 100;
字段含義優化參考價值
Query_time總執行時間核心指標,> long_query_time 即記錄
Lock_time等待鎖時間高鎖等待提示熱點行爭用或長事務
Rows_examined掃描行數關鍵:Rows_examined >> Rows_sent 表明全表掃描/索引失效
Rows_sent返回行數大結果集傳輸開銷

五大分析工具對比

工具特點適用場景Windows 支援
mysqldumpslowMySQL 內建,Perl 腳本快速聚合 Top N、按時間/次數/掃描行排序需 Perl 環境 (Strawberry Perl)
pt-query-digest (Percona Toolkit)功能最強,支援多維度報表、歷史趨勢、EXPLAIN 自動分析生產環境標準分析工具需 Perl,Windows 可用
mysqlsla較老,功能豐富歷史項目維護Perl 依賴複雜
MySQL Workbench圖形化,視覺化分析偶爾手工分析、團隊協作原生支援
GoAccess / Graylog / ELK日誌集中化平台大規模集群、實時告警Docker 部署跨平台

pt-query-digest 實戰命令

# 安裝 Percona Toolkit
yum install -y percona-toolkit  # 或下載二進制

# 基礎分析:生成報表
pt-query-digest /var/log/mysql/slow.log --limit 20 --output json > slow_report.json

# 進階:按 Query_time 降序,顯示 EXPLAIN
pt-query-digest /var/log/mysql/slow.log \
  --order-by Query_time:desc \
  --limit 10 \
  --explain h=localhost,u=root,p=pass \
  --filter '$event->{fingerprint} =~ /SELECT/'

# 實時監控模式
pt-query-digest --processlist h=localhost,u=root,p=pass --interval 5 --run-time 300

生產環境最佳實踐

  1. 分級閾值:核心業務庫 long_query_time=0.5,非核心 1-2
  2. 日誌輪轉:logrotate 每日切割,保留 30 天,壓縮舊檔
  3. 定期分析排程:每日跑 pt-query-digest,推送 Top 10 到監控群/郵件
  4. 索引優化閉環:慢查詢 → EXPLAIN → 建索引 → 驗證 → 回歸測試
  5. 避免 log_queries_not_using_indexes 長期開啟:改用 Performance Schema 或 sys.schema_unused_indexes 定期掃描
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved