慢查詢日志聚焦性能瓶頸,通用查詢日志覆蓋全量 SQL,二者互補。本文基於 MySQL 5.5 實測,系統講解兩類日志的動態配置、參數遷移、mysqldumpslow 分析、pt-query-digest 進階報告的完整工具鏈。
# my.cnf log=/tmp/mysqlgen.log # 啟動報警告:'--log' is deprecated, use '--general-log'/'--general-log-file'
# 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';
mysqldumpslow -s at -t 10 /tmp/mysqlslow.log1 # -s 排序:at(平均時間) al(平均鎖) ar(平均行) c(次數) t(總時間) l(鎖時間) r(行數) # -t Top N # -a 不抽象化數值/字符串 # -g 正則過濾
# 基礎報告
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
install.sql(含 global_query_review、global_query_review_history)slowlog/123456config.php 配置 DSN、審計表名pt-query-digest --review/--review-history 入庫慢查詢日志是性能優化的「體檢報告」,通用查詢日志是「行為錄像」。**動態開啟 + 從庫采集 + 微秒級閾值 + pt-query-digest 歸因 + 可視化追蹤** 構建閉環,讓慢 SQL 無處遁形。