編輯 my.cnf / my.ini 的 [mysqld] 區塊:
slow_query_log = 1
slow_query_log_file = /var/lib/mysql/slowquery.log
long_query_time = 2
log_queries_not_using_indexes = 1
參數說明:
long_query_time=2:超過 2 秒記錄(支援微秒,如 0.5)log_queries_not_using_indexes:記錄未用索引的查詢(慎用,量大)# Time: 070927 8:08:52
# User@Host: root[root] @ [192.168.0.20]
# Query_time: 372 Lock_time: 136 Rows_sent: 152 Rows_examined: 263630
SELECT id, name FROM manager WHERE id IN (66,10135);
Query_time:總耗時(秒)Lock_time:鎖等待時間Rows_examined:掃描行數(關鍵優化指標)Rows_sent:返回行數# 顯示訪問次數最多的 20 條 SQL
mysqldumpslow -s c -t 20 /var/lib/mysql/slowquery.log
# 顯示返回行數最多的 20 條 SQL
mysqldumpslow -s r -t 20 /var/lib/mysql/slowquery.log
# 顯示耗時最長的 10 條包含 LEFT JOIN 的 SQL
mysqldumpslow -t 10 -s t -g "left join" /var/lib/mysql/slowquery.log
| 參數 | 含義 |
|---|---|
-s | 排序方式:c=次數、t=時間、l=鎖時間、r=返回行數;前綴 a=倒序 |
-t N | Top N 條 |
-g PATTERN | 正則過濾(不區分大小寫) |
-a | 不抽象化數字/字符串(顯示真實值) |
-l | 不扣除鎖時間(含鎖時間排序) |
long_query_time=1)mysqldumpslow 分析 Top SQLEXPLAIN 定位全表掃描、臨時表、文件排序慢查詢日誌對性能影響極小(假設多數查詢快),但能精準定位「丟失索引、索引未最佳應用」的問題 SQL,ROI 極高。