mysql从库延时好高_MySQL 中主库跑太快,从库追不上咋整?

咱们知道生产环境中常常会遇到MySQL主从延迟问题,从原理上也能看出主库的事务提交是并发模式,而从库只有一个SQL线程负责解析,因此自己上就可能存在延迟。sql

基本原理

MySQL主从复制实际上基于二进制日志,Mysql 中主从复制时有两个很重要的日志文件:binlog(二进制日志文件),relay log(中继日志文件),基本原理看图片

6f30144f3f536110d98f234a83783188.png安全

配置好了, 在主从同步过程当中, 主服务器会把更新语句写入binlog, 从服务器的IO 线程(这里要注意, 5.6.3 以前的IO线程仅有一个,5.6.3以后的有多线程去读了,速度天然也就加快了)回去读取主服务器的binlog 而且写到从服务器的Relay log 里面,而后从服务器的 的SQL thread 会一个一个执行 relay log 里面的sql , 进行数据恢复。服务器

1. 主从同步的延迟的缘由

一个服务器开放N个连接给客户端来链接的, 这样有会有大并发的更新操做, 可是从服务器的里面读取binlog 的线程仅有一个, 当某个SQL在从服务器上执行的时间稍长 或者因为某个SQL要进行锁表就会致使,主服务器的SQL大量积压,未被同步到从服务器里。这就致使了主从不一致, 也就是主从延迟。微信

随机重放

Mysql 主库中写 binlog 的操做是顺序写的,以前咱们提到过,磁盘的顺序读写速度是很快的。一样的,从库中的 I/O 线程操做日志的速度效率也是很高的。可是别忘了,还有一个 SQL 线程来进行数据重放,而重放的过程是随机写盘的。到这里你应该就明白了吧,某一时刻 relay log 里的数据来不及重放进从库,就会产生主从延迟的状况。多线程

主库并发高

知道了从库中 SQL 线程的重放状况,对于主库并发高致使主从延迟确定就不难理解了。某一时刻,大量写请求打到主库上,意味着要不断对 binlog 进行写入,此时从库中的 SQL 线程就会目不暇接,天然会产生主从延迟。并发

锁等待

对于 SQL 单线程来讲,当遇到阻塞时就会一直等待,直到执行成功才会继续进行。若是某一时刻从库由于查询产生了锁等待的状况,此时只有当前的操做执行完成后才会进行下面的操做,同理也就产生了主从延迟的状况。线程

2. 主从同步延迟的解决办法

实际上主从同步延迟根本没有什么一招制敌的办法, 由于全部的SQL必须都要在从服务器里面执行一遍,可是主服务器若是不断的有更新操做源源不断的写入, 那么一旦有延迟产生, 那么延迟加剧的可能性就会原来越大。固然咱们能够作一些缓解的措施。日志

改变参数设置

由于主服务器要负责更新操做, 它对安全性的要求比从服务器高, 全部有些设置能够修改,好比sync_binlog=1,innodb_flush_log_at_trx_commit = 1 之类的设置,而slave则不须要这么高的数据安全,彻底能够讲sync_binlog设置为0或者关闭binlog,innodb_flushlog, innodb_flush_log_at_trx_commit 也 能够设置为0来提升sql的执行效率 这个能很大程度上提升效率。另外就是使用比主库更好的硬件设备做为slave。blog

从服务器做备份使用

把一台从服务器看成备份使用, 而不提供查询, 那边他的负载下来了, 执行relay log 里面的SQL效率天然就高了。图片

增长从服务器

这个目的仍是分散读的压力, 从而下降服务器负载。

3. 判断主从延迟的方法

MySQL提供了从服务器状态命令,能够经过 show slave status 进行查看, 好比能够看看Seconds_Behind_Master参数的值来判断,是否有发生主从延时。

其值有这么几种:

NULL - 表示io_thread或是sql_thread有任何一个发生故障,也就是该线程的Running状态是No,而非Yes.

0 - 该值为零,是咱们极为渴望看到的状况,表示主从复制状态正常

注:本文转载自【PHP自学中心】微信公众号

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码配备了详细的注释和文档,帮助用户速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码的注释和文档都非常完善,方便用户速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值