首页 > 其他分享 >slave延迟很大优化方法

slave延迟很大优化方法

时间:2022-12-20 22:36:41浏览次数:53  
标签:slave IOPS 并发 复制 master MySQL 优化 延迟

[MySQL优化案例]系列 — slave延迟很大优化方法

发表回复

slave延迟很大优化方法_主键

备注:插图来自网络搜索,如果觉得不当还请及时告知 :)

一般而言,slave相对master延迟较大,其根本原因就是slave上的复制线程没办法真正做到并发。简单说,在master上是并发模式(以InnoDB引擎为主)完成事务提交的,而在slave上,复制线程只有一个sql thread用于binlog的apply,所以难怪slave在高并发时会远落后master。

ORACLE MySQL 5.6版本开始支持多线程复制,配置选项 slave_parallel_workers 即可实现在slave上多线程并发复制。不过,它只能支持一个实例下多个 database 间的并发复制,并不能真正做到多表并发复制。因此在较大并发负载时,slave还是没有办法及时追上master,需要想办法进行优化。

另一个重要原因是,传统的MySQL复制是异步(asynchronous)的,也就是说在master提交完后,才在slave上再应用一遍,并不是真正意义上的同步。哪怕是后来的Semi-sync Repication(半同步复制),也不是真同步,因为它只保证事务传送到slave,但没要求等到确认事务提交成功。既然是异步,那肯定多少会有延迟。因此,严格意义上讲,MySQL复制不能叫做MySQL同步(处女座的面试官有可能会在面试时把说成MySQL同步的一律刷掉哦)。

另外,不少人的观念里,slave相对没那么重要,因此就不会提供和master相同配置级别的服务器。有的甚至不但使用更差的服务器,而且还在上面跑多实例。

综合这两个主要原因,slave想要尽可能及时跟上master的进度,可以尝试采用以下几种方法:

  1. 采用MariaDB发行版,它实现了相对真正意义上的并行复制,其效果远比ORACLE MySQL好的很多。在我的场景中,采用MariaDB作为slave的实例,几乎总是能及时跟上master。如果不想用这个版本的话,那就老实等待官方5.7大版本发布吧;
    关于MariaDB的Parallel Replication具体请参考:​​​Replication and Binary Log Server System Variables#slave_parallel_threads – MariaDB Knowledge Base​
  2. 每个表都要显式指定主键,如果没有指定主键的话,会导致在row模式下,每次修改都要全表扫描,尤其是大表就非常可怕了,延迟会更严重,甚至导致整个slave库都被挂起,可参考案例:mysql主键的缺少导致备库hang;
  3. 应用程序端多做些事,让MySQL端少做事,尤其是和IO相关的活动,例如:前端通过内存CACHE或者本地写队列等,合并多次读写为一次,甚至消除一些写请求;
  4. 进行合适的分库、分表策略,减小单库单表复制压力,避免由于单库单表的的压力导致整个实例的复制延迟;
  5. 其他提高IOPS性能的几种方法,根据效果优劣,我做了个简单排序:
  • 更换成SSD,或者PCIe SSD等IO设备,其IOPS能力的提升是普通15K SAS盘的数以百倍、万倍,甚至几十万倍计;
  • 加大物理内存,相应提高InnoDB Buffer Pool大小,让更多热数据放在内存中,降低发生物理IO的频率;
  • 调整文件系统为 XFS 或 ReiserFS,相比ext3可以极大程度提高IOPS能力。在高IOPS压力下,相比ext4有更稳健的IOPS表现(有人认为 XFS 在特别的场景下会有很大的问题,但我们除了剩余磁盘空间少于10%时引发丢数据外,其他的尚未遇到);
  • 调整RAID级别为raid 1+0,它相比raid1、raid5等更能提高IOPS性能。如果已经全部是SSD设备了,可以2块盘做成RAID 1,或者多快盘做成RAID 5(并且可以设置全局热备盘,提高阵列容错性),甚至有些土豪用户直接将多块SSD盘组成RAID 50;
  • 调整RAID的写cache策略为WB或FORCE WB,详情请参考:常用PC服务器阵列卡、硬盘健康监控​ 以及 PC服务器阵列卡管理简易手册;
  • 调整内核的io scheduler,优先使用deadline,如果是SSD,则可以使用noop策略,相比默认的cfq,个别情况下对IOPS的性能提升至少是数倍的。



标签:slave,IOPS,并发,复制,master,MySQL,优化,延迟
From: https://blog.51cto.com/u_13753753/5956870

相关文章

  • tomcat优化-有改protocol 和 缓存 集群方案
     tomcat优化在线上环境中我们是采用了tomcat作为Web服务器,它的处理性能直接关系到用户体验,在平时的工作和学习中,归纳出以下七种调优经验。1.服务器资源  服务器所能提......
  • Redis热点大Key的优化过程
    概念介绍热点Key产生的背景用户消费的数据远大于生产的数据(热卖商品、热点新闻、热点评论、热门明星直播)。对于电商网站中,我们经常可以会遇到热门商品的抢购或者秒杀场景以......
  • Dockerfile优化
    Dockerfile优化Dockerfile文件优化$cat>Dockerfile<<EOFFROMnode:9.11.1-alpineasbuild-stageRUNmkdir-p/usr/src/appWORKDIR/usr/src/appCOPYpackage*.......
  • 一步步优化JVM五:优化延迟或者响应时间
    本节的目标是做一些优化以满足对应用对延迟的需求。这次需要几个步骤,包括完善Java堆大小的配置,评估垃圾回收占用的时间和频率,也许还要尝试切换到不同的垃圾回收器,以及由于使......
  • 故障分析 | MySQL : slave_compressed_protocol 导致 crash
    作者:胡呈清爱可生DBA团队成员,擅长故障分析、性能优化,个人博客:https://www.jianshu.com/u/a95ec11f67a8,欢迎讨论。现象MySQL版本:8.0.18create.sql:zabbix初始化脚本,包含建......
  • 技术分享 | 优化 InnoDB 的主键
    作者:YvesTrudeau翻译:管长龙前言作为Percona的首席架构师,我的主要职责之一是对客户的数据库进行性能方面的优化,这使得工作复杂且非常有趣。在这篇文章中,我想讨论一个最重......
  • 从面试题入手,畅谈 Vue 3 性能优化
    前言今年又是一个非常寒冷的冬天,很多公司都开始人员精简。市场从来不缺前端,但对高级前端的需求还是特别强烈的。一些大厂的面试官为了区分候选人对前端领域能力的深度,经常......
  • 聚合查询、分组查询、ORM中如何给表再次添加新的字段、F与Q查询、ORM查询优化、ORM事
    今日内容聚合查询在ORM中支持单独使用聚合函数,需要使用aggregate方法。聚合函数:Max最大、Min最小、Sum总和、Avg平均、count统计fromdjango.db.modelsimportMax,......
  • 故障分析 | MySQL 优化案例 - 字符集转换
    作者:xuty本文关键字:SQL优化、字符集一、背景Serverversion:5.7.24-logMySQLCommunityServer(GPL)开发联系我,说是开发库上有一张视图查询速度很慢,9000条数据要查10......
  • 故障分析 | MySQL 优化案例 - select count(*)
    作者:xuty本文关键字:count、SQL、二级索引一、故事背景项目组联系我说是有一张500w左右的表做selectcount(*)速度特别慢。二、原SQL分析Serverversion:5.7.24-logMy......