編輯 MySQL 設定檔(my.cnf 或 my.ini),在 [mysqld] 區段新增:
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2 -- 超過 2 秒記錄
log_queries_not_using_indexes = 1 -- 記錄未用索引的查詢
重啟 MySQL 服務生效:systemctl restart mysqld 或 service mysqld restart。
# 排序前 10 筆最耗時查詢
mysqldumpslow -s t -t 10 /var/log/mysql/slow.log
# 排序查詢次數最多
mysqldumpslow -s c -t 10 /var/log/mysql/slow.log
pt-query-digest /var/log/mysql/slow.log --limit 20 --output json > slow_report.json
EXPLAIN SELECT ... 檢查 type=ALL(全表掃描),補加索引;LIKE '%keyword%' 無法使用索引,改用全文索引;MySQL 5.6+ 可啟用 performance_schema,配合 sys.schema 視圖直接查詢 sys.statements_with_runtimes_in_95th_percentile 等現成報表,無需解析文字日誌。