什么原因可能导致主备延迟?

时间:2024-03-13 15:54:07

主备延迟最直接的表现是,备库消费中转日志(relay log)的速度,比主库生产 binlog 的速度要慢。

  1. 备库所在机器的性能要比主库所在的机器性能差。这种部署现在比较少了。因为主备可能发生切换,备库随时可能变成主库,所以主备库选 用相同规格的机器,并且做对称部署,是现在比较常见的情况。
  2. 备库的压力大。一般的想法是,主库既然提供了写能力,那么备 库可以提供一些读能力。或者一些运营后台需要的分析语句,不能影响正常业务,所以只能在备库上跑。
  3. 大事务。因为主库上必须等事务执行完成才会写入 binlog,再传给备库。所 以,如果一个主库上的语句执行 10 分钟,那这个事务很可能就会导致从库延迟 10 分钟。所以不要一次性删除大量数据。
  4. 备库没有并行复制能力。下面是其解决方法。

什么原因可能导致主备延迟?

把上图中只有一个线程的 sql_thread,拆成多个线程。

什么原因可能导致主备延迟?

coordinator 就是原来的 sql_thread, 不过现在它不再直接更新数据了,只负责读取中 转日志和分发事务。真正更新日志的,变成了 worker 线程。而 work 线程的个数,就是由参数 slave_parallel_workers 决定的。把这个值设置为 8~16 之间最好(32 核物理 机的情况),毕竟备库还有可能要提供读查询,不能把 CPU 都吃光了。