网络确实可能会造成主从延迟,比如主库或者从库的带宽打满,又或者是主库的bin log被设置成了row格式,导致有大量的数据需要传输,造成了主库的bin log没有及时的同步到从库中,导致了主从的延迟。
4.2 机器性能但是除了网络,更多的是从库的消费速度,跟不上主库的生产速度。
这方面有很多原因,比如可能从库的机器配置低于主库,因为会有人觉得既然是备库,没什么请求,就把备库配置在了比较差的机器上面。
又或者在是后台的数据分析,将CPU打满。
总之,如果在从库中需要有大量的查询分析操作,需要考虑多个从库。
4.3 大事务如果主库执行了一条耗时很长的事务,那么这条事务发送到从库中,可能也需要执行这么长的时间。而这个时候,从库是没有办法继续消费新的relay log的。这就造成了主从延迟。
4.4 锁我们之前提到过了,不仅仅写数据会加锁,使用“当前读”,也一样可能会加锁。
所以,如果在从库上执行了一些诸如select ... for update,或者一些DDL语句,可能也会造成从库加锁,导致主从延迟。
4.5 并发在我们上面的介绍中,SQL线程是单线程的,所以,如果能够让SQL线程可以并发消费,那么主从延迟就可以大幅度的降低了。
关于MySQL的并发复制策略,MySQL5.6开始已经正式支持了,本文不详细解释。
写在最后首先,谢谢你能看到这里。
这一篇的文章,其实说的内容不多,大多都是一些理论性质的内容,目的是能够对MySQL的主从复制有一些大体上的了解,并且知道对于延迟方面的问题,应该从哪个方向去考虑。
至于其他更具体的操作、如何调优,以及更深的原理,我想在今后的《进阶篇》来提到。
并且,《MySQL 入门》系列到这里就完结了。希望这五篇的内容能够给你带来一些帮助,能够让你对MySQL的了解更深一些。
当然了,在学习MySQL的过程中,我可能也会有一些错误的理解,如果有哪里是不对的,希望你能指出,谢谢你!
PS:如果有其他的问题,也可以在公众号找到我,欢迎来找我玩~