您现在的位置是:亿华云 > IT科技
MySQL主从延时这么长,要怎么优化?
亿华云2025-10-08 23:28:00【IT科技】0人已围观
简介MySQL主从复制,读写分离是互联网常见的数据库架构,该架构最令人诟病的地方就是,在数据量较大并发量较大的场景下,主从延时会比较严重。为什么主从延时这么大?答:MySQL使用单线程重放RelayLog
MySQL主从复制,从延读写分离是时长互联网常见的数据库架构,该架构最令人诟病的优化地方就是,在数据量较大并发量较大的从延场景下,主从延时会比较严重。时长
为什么主从延时这么大?优化
答:MySQL使用单线程重放RelayLog。
应该怎么优化,从延缩短重放时间?时长
答:多线程并行重放RelayLog可以缩短时间。
多线程并行重放RelayLog有什么问题?优化
答:需要考虑如何分割RelayLog,才能够让多个数据库实例,从延多个线程并行重放RelayLog,时长不会出现不一致。优化
为什么会出现不一致?从延
答:如果RelayLog随机的分配给不同的重放线程,假设RelayLog中有这样三条串行的时长修改记录:
update account set money=100 where uid=58; update account set money=150 where uid=58; update account set money=200 where uid=58;如果单线程串行重放:能保证所有从库与主库的执行序列一致。
画外音:***money都将为200。优化
如果多线程随机分配重放:多重放线程并发执行这3个语句,谁***执行是不确定的,最终从库数据可能与主库不同。
画外音:多个从库可能money为100,150,200不确定。
如何分配,多个从库多线程重放,云服务器也能得到一致的数据呢?
答:相同库上的写操作,用相同的线程来重放RelayLog;不同库上的写操作,可以并发用多个线程并发来重放RelayLog。
如何做到呢?
答:设计一个哈希算法,hash(db-name) % thread-num,库名hash之后再模上线程数,就能很轻易做到,同一个库上的写操作,被同一个重放线程串行执行。
画外音:不同库上的重放,是并行的,就起到了加速做用。
这个方案有什么不足?
答:很多公司对MySQL的使用是“单库多表”,如果是这样的话,仍然只有一个库,还是不能提高RelayLog的重放速度。
启示:将“单库多表”的DB架构模式升级为“多库多表”的DB架构模式。亿华云
画外音:数据量大并发量大的互联网业务场景,“多库”模式还具备着其他很多优势,例如:
非常方便的实例扩展:DBA很容易将不同的库扩展到不同的实例上; 按照业务进行库隔离:业务解耦,进行业务隔离,减少耦合与相互影响; 非常方便微服务拆分:每个服务拥有自己的实例就方便了;“单库多表”的场景,多线程并行重放RelayLog还能怎么优化?
答:即使只有一个库,事务在主库上也是并发执行的,既然在主库上可以并行执行,在从库上也应该能够并行执行呀?
新思路:将主库上同时并行执行的事务,分为一组,编一个号,这些事务在从库上的回放可以并行执行(事务在主库上的执行都进入到prepare阶段,说明事务之间没有冲突,否则就不可能提交),没错,MySQL正是这么做的。
解法:基于GTID的并行复制。
从MySQL5.7开始,将组提交的亿华云计算信息存放在GTID中,使用mysqlbinlog工具,可以看到组提交内部的信息:
从MySQL5.7开始,将组提交的信息存放在GTID中,使用mysqlbinlog工具,可以看到组提交内部的信息: 20181014 23:52 server_id 58 XXX GTID last_committed=0 sequence_numer=1 20181014 23:52 server_id 58 XXX GTID last_committed=0 sequence_numer=2 20181014 23:52 server_id 58 XXX GTID last_committed=0 sequence_numer=3 20181014 23:52 server_id 58 XXX GTID last_committed=0 sequence_numer=4和原来的日志相比,多了last_committed和sequence_number。
什么是last_committed?
答:它是事务提交时,上次事务提交的编号,如果具备相同的last_committed,说明它们在一个组内,可以并发回放执行。
总结
MySQL并行复制,缩短主从同步时延的方法,体现着这样的一些架构思想:
多线程是一种常见的缩短执行时间的方法;画外音:例如,很多crontab可以用多线程,切分数据,并行执行。 多线程并发分派任务时,必须保证幂等性:MySQL提供了“按照库幂等”,“按照commit_id幂等”两种方式,很值得借鉴;画外音:例如,群消息,可以按照group_id幂等;用户消息,可以按照user_id幂等。具体到MySQL主从同步延时:
mysql5.5:不支持并行复制,大伙快升级MySQL版本; mysql5.6:按照库并行复制,建议使用“多库”架构; mysql5.7:按照GTID并行复制;【本文为专栏作者“58沈剑”原创稿件,转载请联系原作者】
戳这里,看该作者更多好文
很赞哦!(426)
相关文章
- 4、选择一个安全的域名注册商进行域名注册
- 我发现了 高性能异步编程 和 实时流模型 那千丝万缕的联系!
- 微服务进阶:设计层面详解Eureka配置部分源码
- 欧拉开发者大会即将开启:全球芯片、整机、软件厂商共建数字基础设施开源操作系统
- 域后缀首选.com,.net,然后是.cn。后缀选择不当,导致流量损失。域名是企业与互联网网址之间的链接,关键是企业在网络上存在的标志。因此,选择好域名是开展网上工作的首要重要条件。
- 如何构建全球最佳数据中心平台
- 如何通过数据中心效率的标准和指标实现可持续发展
- Nginx快速入门之Nginx反向代理与负载均衡
- 当投资者经过第二阶段的认真学习之后又充满了信心,认为自己可以在市场上叱咤风云地大干一场了。但没想到“看花容易绣花难”,由于对理论知识不会灵活运用.从而失去灵活应变的本能,就经常会出现小赢大亏的局面,结果往往仍以失败告终。这使投资者很是困惑和痛苦,不知该如何办,甚至开始怀疑这个市场是不是不适合自己。在这种情况下,有的人选择了放弃,但有的意志坚定者则决定做最后的尝试。
- 一文带你搞懂Nginx如何配置Http、Https、WS、WSS!