分析binlog,找出熱表:
(1)binlog中記錄的都是dml語句,主要包括update insert 和delete,先過濾出來:
mysqlbinlog mysql-bin.005751 |grep -i -E "^(update|insert|delete)" > 1.dml.sql
(2)找出最近的10w條sql來分析:
tail -n 100000 1.dml.sql > 2.tail_dml.sql
(3)把所有的數(shù)字替換成D, 這樣可以統(tǒng)計(jì)分表上面的sql:
sed -i -r 's/[0-9]{1,}/D/g' 2.tail_dml.sql
(4)排序,找出執(zhí)行次數(shù)最多的sql語句,按照降序排列,取top 50的sql來分析:
sort 2.tail_dml.sql |uniq -c |sort -n -r |head -n 50 > 3.sorted_top_50.sql
如果是dml語句導(dǎo)致的io問題,就可以考慮優(yōu)化top 50的熱門sql語句涉及到的表結(jié)構(gòu),來降低服務(wù)器負(fù)載.