mysqldumpslow分析 MySQL 的慢查詢?nèi)罩?/span>
mysqldumpslow 是 MySQL 自帶的工具,用于分析 MySQL 的慢查詢?nèi)罩荆⊿low Query Log),幫助開發(fā)者快速定位執(zhí)行效率低下的 SQL 語(yǔ)句。以下是詳細(xì)使用方法及場(chǎng)景分析:
1. 基本用法
命令語(yǔ)法:
mysqldumpslow [選項(xiàng)] [慢查詢?nèi)罩疚募窂絔
常用選項(xiàng):
| 選項(xiàng) | 說(shuō)明 |
|---|---|
-s ORDER |
排序方式,可選值:t(按總時(shí)間排序)、l(按鎖定時(shí)間排序)、r(按返回行數(shù)排序)、c(按出現(xiàn)次數(shù)排序) |
-t NUM |
僅顯示前 NUM 條結(jié)果 |
-g PATTERN |
用 grep 過(guò)濾匹配特定模式的 SQL |
-a |
不將數(shù)字和字符串抽象化(顯示完整 SQL) |
-v |
調(diào)試模式(顯示詳細(xì)信息) |
2. 典型場(chǎng)景示例
示例 1:按總執(zhí)行時(shí)間排序,顯示前 10 條慢查詢
mysqldumpslow -s t -t 10 /var/lib/mysql/mysql-slow.log
示例 2:按出現(xiàn)次數(shù)排序,顯示最頻繁的 5 條 SQL
mysqldumpslow -s c -t 5 /var/lib/mysql/mysql-slow.log
示例 3:過(guò)濾包含 SELECT 的慢查詢
mysqldumpslow -g "SELECT" /var/lib/mysql/mysql-slow.log
3. 輸出結(jié)果解析
假設(shè)輸出如下:
Count: 12 Time=5.23s (62s) Lock=0.00s (0s) Rows=100.0 (1200), user1[user1]@host1
SELECT * FROM orders WHERE user_id = N
- Count: 該 SQL 出現(xiàn)的次數(shù)(12 次)
- Time: 平均執(zhí)行時(shí)間(5.23秒),括號(hào)內(nèi)是總時(shí)間(62秒)
- Lock: 平均鎖定時(shí)間(0秒)
- Rows: 平均返回行數(shù)(100行),括號(hào)內(nèi)是總行數(shù)(1200行)
- SQL 語(yǔ)句:
SELECT * FROM orders WHERE user_id = N(N是抽象化的值)
4. 常見問(wèn)題及排查
問(wèn)題 1:權(quán)限不足
mysqldumpslow: 無(wú)法讀取日志文件: Permission denied
解決方法:
使用 sudo 或以 MySQL 用戶身份運(yùn)行:
sudo mysqldumpslow /var/lib/mysql/mysql-slow.log
問(wèn)題 2:日志文件未啟用
mysqldumpslow: 找不到慢查詢?nèi)罩疚募?
解決方法:
在 MySQL 配置文件(my.cnf 或 my.ini)中啟用慢查詢?nèi)罩荆?/p>
[mysqld]
slow_query_log = 1
slow_query_log_file = /var/lib/mysql/mysql-slow.log
long_query_time = 2 # 記錄執(zhí)行時(shí)間超過(guò)2秒的查詢
5. 高階技巧
結(jié)合 grep 和 awk 提取關(guān)鍵信息
# 提取執(zhí)行時(shí)間超過(guò)10秒的查詢
mysqldumpslow -a /var/lib/mysql/mysql-slow.log | grep "Time=10"
導(dǎo)出為 CSV 分析
mysqldumpslow -a -s t /var/lib/mysql/mysql-slow.log | awk '{print $3,$5,$7}' > slow.csv
6. 優(yōu)化建議
-
索引優(yōu)化
對(duì)頻繁出現(xiàn)在WHERE或JOIN中的字段添加索引:ALTER TABLE orders ADD INDEX idx_user_id (user_id); -
拆分復(fù)雜查詢
將大查詢拆分為多個(gè)小查詢(如分頁(yè)查詢)。 -
緩存策略
使用 MySQL 查詢緩存或 Redis 緩存高頻查詢結(jié)果。 -
監(jiān)控工具
結(jié)合pt-query-digest(Percona Toolkit)生成更詳細(xì)的報(bào)告:pt-query-digest /var/lib/mysql/mysql-slow.log
7. 安全警告
若發(fā)現(xiàn)大量異常慢查詢(如全表掃描、未授權(quán)的復(fù)雜 JOIN),需排查:
- 是否遭受 SQL 注入攻擊?
- 是否有惡意爬蟲高頻訪問(wèn)?
通過(guò) mysqldumpslow 分析慢查詢?nèi)罩荆梢钥焖俣ㄎ恍阅芷款i并針對(duì)性優(yōu)化。
有耕耘、有搬運(yùn)、共學(xué)習(xí)

浙公網(wǎng)安備 33010602011771號(hào)