一个客户的mysql数据库恢复在最后一步是滚binlog,结果恢复特别慢,CPU占用率100%,磁盘IO几乎是零,show processlist发现线程在sleep。从general log里面看不到任何动静,似乎找不到解决的办法。
登录上去用strace分析mysqld进程发现:
全部在进行内存分配。分析mysqld的参数,发现一个参数innodb_buffer_pool_instances 被设置为64,很是可疑,就是innodb_buffer_pool被分成了64个单位,而innodb_buffer_pool只有16G。
改成1,重新启动mysqld,mysqlbinlog立马飞速运转起来。