# w / sar -q 1 查看負載 load average: 7.20, 6.70, 6.47 -- 24 CPU 下負載偏高 # top 確認佔用 CPU 進程 PID USER %CPU COMMAND 14165 mysql 162% mysqld (port 3320) 40610 mysql 121% mysqld Cpu(s): 7.7%us, 3.4%sy, 11.0%wa -- us(用戶態) + wa(IO等待) 偏高 # sar -d 1 確認磁碟 IO dev8-0: tps 5000+, %util 100% -- 磁碟飽和 # iotop 定位具體實例 TID DISK READ COMMAND 16397 8.92 M/s mysqld --port=3320 <-- 3320 實例 IO 最高
mysqladmin pr | grep -v Sleep Id Time State Info 25 68 Sending data SELECT max(Fvideoid) FROM (SELECT Fvideoid FROM t WHERE Fvideoid>404612 ORDER BY Fvideoid) t1 26 65 Sending data ... Fvideoid>484915 ... 28 130 Sending data ... Fvideoid>404641 ... ... -- 多條相似慢查詢並發執行
Rows_sent: 1 Rows_examined: 5,502,460 -- 掃描 550 萬行只為取一個最大值,極度低效
原寫法: 子查詢正序排序取最後一行
SELECT max(Fvideoid) FROM (SELECT Fvideoid FROM t WHERE Fvideoid>404612 ORDER BY Fvideoid) t1
優化寫法: 倒序排序取第一行
SELECT Fvideoid FROM t WHERE Fvideoid>404612 ORDER BY Fvideoid DESC LIMIT 1
效果: 從 150-180 秒降至個位數毫秒,提升數量級。