mysql主从延迟原理

一、mysql主从同步原理

  主库针对读写操作,顺序binlog,从库单线程去主库读“写操作的binlog”,从库取到binlog在本地原样执行(随机写),来保证主从数据逻辑上一致。

  mysql的主从复制都是单线程的操作,主库对所有DDL和DML产生binlog,binlog是顺序写,所以效率很高,slave的Slave_IO_Running线程到主库取日志,效率比较高,下一步问题来了,slave的slave_sql_running线程将主库的DDL和DML操作在slave实施。DML,DDL的IO操作是随机的,不能顺序的,成本高很多,还又跨年slave上的其他查询产生lock,由于slave_sql_running也是单线程的,所以一个DDL卡住了,需要执行一段时间,那么所有之后的DDL会等待这个DDL执行完才会继续执行,这就导致了延迟。

  由于master可以并发,Slave_sql_running线程却不可以,所以主库执行DDL需求一段时间,在slave执行相同的DDL时,就产生了延迟。

 

二、主从同步延迟产生原因

  当主库的TPS并发较高时,产生的DDL数量超过Slave一个sql线程所能承受的范围,那么延迟就产生了,当然还有跨年与slave的大型query语句产生了锁等待

  首要原因:数据库在业务上读写压力太大,CPU计算负荷大,网卡负荷大,硬盘随机IO太高

  次要原因:读写binlog带来的性能影响,网络传输延迟

 

三、主从同步延迟解决方案

  架构方面:

  1.业务的持久化层的实现采用分库架构,mysql服务可平行扩展分散压力

  2.单个库读写分离,一主多从,主写从读,分散压力

  3.服务的基础架构在业务和mysql之间加放cache层

  4.不同业务的mysql放在不同的机器

  5.使用比主库更好的硬件设备作slave

  反正就是mysql压力变小,延迟自然会变小

 

  硬件方面:采用好的服务器

  mysql主从同步加速:

  1.sync_binlog在slave端设置为0

  2.-logs-slave-updates 从服务器从主服务器接收到的更新不记入它的二进制日志

  3.直接禁用slave端的binlog

  4.slave端,如果使用的存储引擎是innodb,innodb_flush_log_at_trx_commit=2

  

  

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值