日期:2014-05-16 浏览次数:20683 次
同事问了个线上现象:主备机器配置一样,主库上有更新查询,备库设置为主库的从库,没有其他更新和查询压力。但备库的io util比主库的重。本来看主库的压力比较大,想把一部分查询切到备库,一看io这样,不太敢切。
?
1、原因
这个原因两年前在之前公司碰到过一次,只是现象不同。那个现象描述起来比较复杂,这回刚好借这个现象说明一下。
原因还是从srv_master_thread说起。这个InnoDB后台的主进程一直在循环作各种事情。其中有一个for (i = 0; i < 10; i++) ,循环体每执行一次sleep 1秒,作一些flush和merge的事情,网上这类文章很多,不细数了。我们要关注的是循环中的这句话
?
??????????????? if (srv_activity_count == old_activity_count) { ??????????????????????? /* There is no user activity at the moment, go to ??????????????????????? the background loop */ ??????????????????????? goto background_loop; ??????????????? }?? |
?
注释也说的明白,如果此时没有用户活动,则认为是系统空闲,执行background_loop。这个background_loop流程作的事情包括insert buffer merge和 flush buffer pool pages。 都是些耗系统资源的活儿。做完之后又回到for前面的逻辑。
?
而对于从库来说,一直没有用户请求,所以一进入