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

MySQL 歷史查詢日志與慢查詢日志:配置、分析與生產環境最佳實踐

     編輯:MySQL 資料庫相關知識

通用查詢日志:記錄所有 SQL

SHOW PROCESSLIST 只能捕捉長時間運行的查詢,對毫秒級語句「拼不過手速」。通用查詢日志(General Query Log)記錄所有客戶端連接與執行的語句,是審計、排查的完整記錄。

啟用方法

  1. 編輯 /etc/my.cnf(Windows 為 my.ini),在 [mysqld] 區段添加:
    log = /var/log/mysql/mysql.log

    注意: 日志路徑需具備 MySQL 進程寫入權限,避免放在 /home 等受限目錄。

  2. 重啟服務生效:service mysqld restart

查看與分析

# 實時跟蹤
tail -f /var/log/mysql/mysql.log

# 下載離線分析
scp user@host:/var/log/mysql/mysql.log ./
⚠️ 生產環境警示: 通用日志記錄所有語句,高並發下日志增長極快,會佔用大量磁盤 IO 與空間。建議僅在排查期短期開啟,平時保持關閉。

慢查詢日志:專注性能瓶頸

慢查詢日志僅記錄執行時間超過閾值或未使用索引的查詢,體積小、價值高,適合長期開啟。

配置參數

[mysqld]
# 慢查詢日志路徑
log-slow-queries = /var/lib/mysql/slowquery.log
# 閾值:超過 5 秒記錄(單位:秒)
long_query_time = 5
# 記錄未使用索引的查詢
log-queries-not-using-indexes

參數說明

參數作用建議值
log-slow-queries日志文件路徑獨立分區,避免影響主庫 IO
long_query_time慢查詢閾值生產環境 1~2 秒;開發環境 0.5 秒
log-queries-not-using-indexes記錄全表掃描開啟,發現隱性慢查詢
log-slow-admin-statements記錄管理命令可選開啟
min_examined_row_limit最小掃描行數閾值1000,過濾微小表誤報

慢查詢分析工具鏈

  1. mysqldumpslow:官方自帶,聚合相似 SQL,按次數/時間/掃描行排序
    mysqldumpslow -s t -t 10 /var/lib/mysql/slowquery.log
  2. pt-query-digest:Percona Toolkit 核心工具,功能最強,生成詳細報告
    pt-query-digest /var/lib/mysql/slowquery.log > slow_report.txt
  3. MySQL 5.7+ 原生 sys schema:sys.schema_table_statistics、sys.statement_analysis 等視圖直接查詢

生產環境最佳實踐

  • 慢查詢日志常開:設 long_query_time=1,配合 log_queries_not_using_indexes=ON
  • 日志輪轉:配置 logrotate 定期壓縮、清理舊日志,防止磁盤爆滿
  • 分離存儲:日志目錄掛載獨立磁盤/分區,避免與數據文件爭搶 IO
  • 定期審計:每周跑一次 pt-query-digest,建立慢查詢治理清單
  • 關閉通用日志:除非臨時排查,否則生產環境嚴禁長期開啟通用查詢日志
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved