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

MySQL 慢查詢日志與通用查詢日志:從配置到分析工具鏈的完整指南

     編輯:MySQL 資料庫相關知識

慢查詢日志聚焦性能瓶頸,通用查詢日志覆蓋全量 SQL,二者互補。本文基於 MySQL 5.5 實測,系統講解兩類日志的動態配置、參數遷移、mysqldumpslow 分析、pt-query-digest 進階報告的完整工具鏈。

一、 通用查詢日志

舊參數(5.1 棄用)

# my.cnf
log=/tmp/mysqlgen.log
# 啟動報警告:'--log' is deprecated, use '--general-log'/'--general-log-file'

新參數(5.1.6+ 推薦)

# my.cnf
general_log = 1
general_log_file = /tmp/mysqlgen.log

動態控制

SET GLOBAL general_log = ON;
SET GLOBAL general_log_file = '/tmp/mysqlgen.log';
SET GLOBAL log_output = 'FILE';  -- 或 TABLE, FILE,TABLE

日志內容示例

130731 7:55:41 1 Query show databases
130731 7:55:56 1 Query SELECT DATABASE()
1 Init DB test
130731 7:55:59 1 Query show tables

二、 慢查詢日志

核心參數

參數說明默認值
slow_query_log開關OFF
slow_query_log_file文件路徑host-slow.log
long_query_time閾值(秒,支援微秒)10
log_queries_not_using_indexes記錄未走索引查詢OFF
log_slow_queries舊參數,棄用—

動態配置示例

SET GLOBAL slow_query_log = ON;
SET GLOBAL slow_query_log_file = '/tmp/mysqlslow.log1';
SET GLOBAL long_query_time = 1;          -- 1 秒
SET GLOBAL log_queries_not_using_indexes = ON;

日志格式解析

# Time: 130801 2:36:25
# User@Host: root[root] @ localhost []
# Query_time: 2.274219 Lock_time: 0.000322 Rows_sent: 0 Rows_examined: 5440
use test;
SET timestamp=1375295785;
INSERT INTO t SELECT * FROM t;
  • Query_time:總耗時(含鎖等待)
  • Lock_time:鎖等待時間
  • Rows_examined:掃描行數,評估全表掃描關鍵指標

未使用索引記錄示例

# Time: 130801 2:43:43
# Query_time: 0.185773 Lock_time: 0.148868 Rows_sent: 0 Rows_examined: 5440
SELECT * FROM t WHERE engine='xxx';

三、 分析工具鏈

1. mysqldumpslow(內建)

mysqldumpslow -s at -t 10 /tmp/mysqlslow.log1
# -s 排序:at(平均時間) al(平均鎖) ar(平均行) c(次數) t(總時間) l(鎖時間) r(行數)
# -t Top N
# -a 不抽象化數值/字符串
# -g 正則過濾

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

# 基礎報告
pt-query-digest /tmp/mysqlslow.log1

# 最近 30 分鐘
pt-query-digest --since 1800s /tmp/mysqlslow.log1

# 指定時間窗
pt-query-digest --since '2023-01-01 00:00:00' --until '2023-01-02 00:00:00' /tmp/mysqlslow.log1

# 僅 SELECT
pt-query-digest --filter '$event->{fingerprint} =~ m/^select/i' /tmp/mysqlslow.log1

# 指定用戶
pt-query-digest --filter '($event->{user} || "") =~ m/^root/i' /tmp/mysqlslow.log1

# 全表掃描/Full Join
pt-query-digest --filter '(($event->{Full_scan} || "") eq "yes") || (($event->{Full_join} || "") eq "yes")' /tmp/mysqlslow.log1

# 寫入審計庫(配合 Query-Digest-UI 可視化)
pt-query-digest --user=slowlog --password=123456 \
  --review h=192.168.1.190,D=slow_query_log,t=global_query_review \
  --review-history h=192.168.1.190,D=slow_query_log,t=global_query_review_history \
  --no-report --limit=0% \
  --filter="\$event->{Bytes} = length(\$event->{arg}) and \$event->{hostname}='$HOSTNAME'" \
  /usr/local/mysql/data/slow.log

四、 可視化平台 Query-Digest-UI 部署要點

  1. 建庫建表 install.sql(含 global_query_review、global_query_review_history)
  2. 創建專用賬號 slowlog/123456
  3. 修改 config.php 配置 DSN、審計表名
  4. 定時任務跑 pt-query-digest --review/--review-history 入庫
  5. Web 端按指紋聚合、時間序列、Top SQL 多維檢視

總結

慢查詢日志是性能優化的「體檢報告」,通用查詢日志是「行為錄像」。**動態開啟 + 從庫采集 + 微秒級閾值 + pt-query-digest 歸因 + 可視化追蹤** 構建閉環,讓慢 SQL 無處遁形。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved