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

用 MySQL Slow Log 定位 CPU 100% 罪魁禍首:開啟、分析與優化閉環

     編輯:MySQL 資料庫相關知識

開啟 Slow Query Log

MySQL 5.0

[mysqld]
long_query_time = 1
log-slow-queries = /var/log/mysql/slow.log

MySQL 5.1+

[mysqld]
long_query_time = 1
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log

建議 **long_query_time = 1** (秒),捕捉 ≥ 1 秒的查詢。運行一段時間後**關閉**避免磁碟寫入壓力。

分析神器:mysqldumpslow

# Top 20 最常執行
mysqldumpslow -s c -t 20 /var/log/mysql/slow.log

# Top 20 返回行數最多
mysqldumpslow -s r -t 20 /var/log/mysql/slow.log

# Top 10 耗時最久且含 LEFT JOIN
mysqldumpslow -t 10 -s t -g "left join" /var/log/mysql/slow.log

排序參數速查

參數意義倒序 (加 a)
c執行次數ac
t總耗時at
l鎖定時間al
r返回行數ar

優化閉環

  1. 開啟 Slow Log (長查詢 ≥ 1s)
  2. 跑業務高峰期 15-30 分鐘
  3. mysqldumpslow 找出 Top N 慢查詢
  4. EXPLAIN 分析執行計畫 (關注 type=ALL、key=NULL、rows 偏大)
  5. 加索引 / 改寫 SQL / 調整結構
  6. 驗證 再跑 Slow Log 確認消失
  7. **定期輪轉** (logrotate) 防磁碟滿

實戰案例

某電商訂單查詢 CPU 長期 90%+,Slow Log 顯示:

# Query_time: 12.3  Lock_time: 0.0  Rows_sent: 1  Rows_examined: 800000
SELECT * FROM orders WHERE buyer_email = 'x@y.com' AND status = 1;

`buyer_email` 無索引 → 全表掃描 80 萬行。加上複合索引 INDEX idx_email_status (buyer_email, status) 後,**Query_time 降至 0.002s,CPU 瞬間降至 10% 以下**。

結語

Slow Log + mysqldumpslow + EXPLAIN = **MySQL 效能調優鐵三角**。建立「每日自動分析 Top 20 → 研發優化 → 驗證」機制,讓 CPU 100% 成為歷史。

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