首先,有些部署条件下,备库所在机器的性能要比主库所在的机器性能差。
一般情况下,有人这么部署时的想法是,反正备库没有请求,所以可以用差一点儿的机器。或者,他们会把 20 个主库放在 4 台机器上,而把备库集中在一台机器上。

其实我们都知道,更新请求对 IOPS 的压力,在主库和备库上是无差别的。所以,做这种部署时,一般都会将备库设置为“非双 1”的模式。

但实际上,更新过程中也会触发大量的读操作。所以,当备库主机上的多个备库都在争抢资源的时候,就可能会导致主备延迟了。

当然,这种部署现在比较少了。因为主备可能发生切换,备库随时可能变成主库,所以主备库选用相同规格的机器,并且做对称部署,是现在比较常见的情况。

追问 1:但是,做了对称部署以后,还可能会有延迟。这是为什么呢?

这就是第二种常见的可能了,即备库的压力大。一般的想法是,主库既然提供了写能力,那么备库可以提供一些读能力。或者一些运营后台需要的分析语句,不能影响正常业务,所以只能在备库上跑。

我真就见过不少这样的情况。由于主库直接影响业务,大家使用起来会比较克制,反而忽视了备库的压力控制。结果就是,备库上的查询耗费了大量的 CPU 资源,影响了同步速度,造成主备延迟。

这种情况,我们一般可以这么处理:
1 一主多从。除了备库外,可以多接几个从库,让这些从库来分担读的压力。
2通过 binlog 输出到外部系统,比如 Hadoop 这类系统,让外部系统提供统计类查询的能力。

其中,一主多从的方式大都会被采用。因为作为数据库系统,还必须保证有定期全量备份的能力。而从库,就很适合用来做备份。

备注:这里需要说明一下,从库和备库在概念上其实差不多。在我们这个专栏里,为了方便描述,我把会在 HA 过程中被选成新主库的,称为备库,其他的称为从库。

追问 2:采用了一主多从,保证备库的压力不会超过主库,还有什么情况可能导致主备延迟吗?

这就是第三种可能了,即大事务。大事务这种情况很好理解。因为主库上必须等事务执行完成才会写入 binlog,再传给备库。所以,如果一个主库上的语句执行 10 分钟,那这个事务很可能就会导致从库延迟 10 分钟。

不知道你所在公司的 DBA 有没有跟你这么说过:不要一次性地用 delete 语句删除太多数据。其实,这就是一个典型的大事务场景。

比如,一些归档类的数据,平时没有注意删除历史数据,等到空间快满了,业务开发人员要一次性地删掉大量历史数据。同时,又因为要避免在高峰期操作会影响业务(至少有这个意识还是很不错的),所以会在晚上执行这些大量数据的删除操作。

结果,负责的 DBA 同学半夜就会收到延迟报警。然后,DBA 团队就要求你后续再删除数据的时候,要控制每个事务删除的数据量,分成多次删除

另一种典型的大事务场景,就是大表 DDL。这个场景,我在前面的文章中介绍过。处理方案就是,计划内的 DDL,建议使用 gh-ost 方案(这里,你可以再回顾下第 13 篇文章《为什么表数据删掉一半,表文件大小不变?》中的相关内容)。

追问 3:如果主库上也不做大事务了,还有什么原因会导致主备延迟吗?
造成主备延迟还有一个大方向的原因,就是备库的并行复制能力。这个话题,我会留在下一篇文章再和你详细介绍。其实还是有不少其他情况会导致主备延迟,如果你还碰到过其他场景,欢迎你在评论区给我留言,我来和你一起分析、讨论。由于主备延迟的存在,所以在主备切换的时候,就相应的有不同的策略。

总结

  • 从库硬件不如主库
  • 大事务

思考

  • 哪些原因会导致主备延迟?

Mysql主备延迟的来源相关推荐

  1. 京东一面:MySQL 主备延迟有哪些坑?主备切换策略

    大家好,我是Tom哥 作为一名开发同学,大家对 MySQL 一定不陌生,像常见的 事务特性.隔离级别 .索引等也都是老生常谈. 今天,我们就来聊个深度话题,关于 MySQL 的 高可用 一.什么是高可 ...

  2. Mysql主备延迟的原因

    1.备库所在的机器性能比主库所在的机器相差很多 解决办法:换机器 2.备库压力大 解决办法:一主多从 3.大事务,新增的的binlog文件过大,在备库中执行时间过长 解决办法:避免大事务,一次性删除大 ...

  3. 《MySQL——主备切换流程与主备延迟》

    目录 主备切换 主备延迟的原因 可靠性优先策略的主备切换流程 可用性优先策略的主备切换流程 主备切换 主备切换分为主动运维与被动操作. 软件升级.主库所在机器按计划下线为主动运维. 主库所在机器掉电为 ...

  4. 美团面试官:MySQL主备、主从、读写分离你知道多少?

    一.MySQL主备的基本原理 在状态1中,客户端的读写都直接访问节点A,而节点B是A的备库,只是将A的更新都同步过来,到本地执行.这样可以保持节点B和A的数据是相同的.当需要切换的时候,就切成状态2. ...

  5. mysql 主备及时_MySQL高可用(二)主备延时如何解决?

    从上篇文章我们知道主备同步是依赖于 binlog,主库负责生产 binlog,备库负责消费 binlog,从而实现主备同步. 今天我们来学习一下主备同步里的一个重点的问题:主备延时. 主备延时,简单来 ...

  6. mysql主备有几种方式,mysql 主备 主从 主主模式介绍

    mysql 主备 主从 主主模式介绍 单点故障的情况不可避免,而且单副本的存储方案早已无法满足业务的可靠性要求,单机可靠性就就两个9,也就是一年大概有3.65天不可用.因此一般情况下我们至少也会上个双 ...

  7. MySQL主备复制原理、实现及异常处理

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...

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

    主备延迟最直接的表现是,备库消费中转日志(relay log)的速度,比主库生产 binlog 的速度要慢. 备库所在机器的性能要比主库所在的机器性能差.这种部署现在比较少了.因为主备可能发生切换,备 ...

  9. mysql 主备心跳监测配置_mysql主备配置

    目录 mysql主备2 一.master配置:2 1. 修改配置文件 2 2. 登录添加账号并赋权限 2 3. 查看master信息 2 二.slave配置:2 1. 修改配置文件 2 2. 重启登录 ...

最新文章

  1. 困扰一周的奇葩bug:重复相似代码多,导致单片机程序跑飞
  2. bootstrap-table操作之“删除”
  3. mysql分库分表方案之sharding-jdbc使用(非demo示例)
  4. java 按钮设置图片_Java中如何设置带图片按钮的大小
  5. android小程序下线,关闭小程序
  6. Spring面试问题与解答
  7. zookeeper专题:zookeeper集群模式下,leader选举流程分析
  8. POJ1275Cashier Employment(查分约束系统)
  9. 下列有关计算机系统叙述正确,()下列有关计算机系统软件的叙述正确的是____
  10. 《深入理解Java虚拟机》 第4章 虚拟机性能监控与故障处理工具
  11. 强大的网页性能测试工具--Speed Tracer
  12. 无标题自用临时文档.C# | python交互
  13. Differential Privacy差分隐私
  14. 阿尔法贝塔剪枝——中国象棋人机对战
  15. env下pkgs --update没有反应直接退出的问题解决方法
  16. calcite mysql_Apache Calcite 简介
  17. 【python 笔记/小白快速入门python】python浅谈(一)犹抱琵琶半遮面
  18. java中的数组长度的计算
  19. 什么是招标控制价?与标底价有什么区别
  20. 用户增长分析——用户分群分析

热门文章

  1. 监控三剑客<cacti、nagios、zabbix>
  2. 《算法图解》——数组和链表
  3. macbook快捷键_MacBook 键盘的「fn」键有什么用
  4. python怎么加锁_Python开发【笔记】:加锁的最佳方案
  5. github使用指南_GitHub 上的 12 个骚操作
  6. winform的label内容居中_C# Winform label自定义大小与居中实现教程
  7. linux搜索文件中包含的字符
  8. ValueError: optimizer got an empty parameter list
  9. python 字符串转函数名_Python 使用函数名(字符串)调用函数(4种方法)
  10. android socket第三方库,OkSocket 一个Android轻量级Socket通讯框架