分析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)把所有的数字替换成D, 这样可以统计分表上面的sql:
sed -i -r 's/[0-9]{1,}/D/g' 2.tail_dml.sql
(4)排序,找出执行次数最多的sql语句,按照降序排列,取top 50的sql来分析:
sort 2.tail_dml.sql |uniq -c |sort -n -r |head -n 50 > 3.sorted_top_50.sql
如果是dml语句导致的io问题,就可以考虑优化top 50的热门sql语句涉及到的表结构,来降低服务器负载.