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

简介: [MySQL优化案例]系列 — 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的性能提升至少是数倍的。

其他更多方法,欢迎大家帮忙补充 :)



            </div>
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
消息中间件 大数据 Kafka
【Kafka】kafka 发展历史分析
【4月更文挑战第5天】【Kafka】kafka 发展历史分析
|
算法 数据可视化 机器人
ubuntu16.04下ROS操作系统学习笔记(九)Moveit(上)
ubuntu16.04下ROS操作系统学习笔记(九)Moveit(上)
777 0
|
5月前
|
人工智能 架构师 程序员
用户说 | 手把手体验通义灵码 2.0:AI 程序员如何让我从“调参侠”进阶“架构师”?
通义灵码 2.0 是强大的 AI 编程工具,助力开发者从“调参侠”进阶为“架构师”。它支持跨语言开发、智能单元测试生成和图生代码等功能,显著提升开发效率。新增 QwQ 模型具备“代码脑补”能力,可推荐性能优化策略。尽管功能强大,但仍需注意环境隔离与代码审查,避免过度依赖。通义灵码 2.0 不仅是工具,更是开发者的“外接大脑”,帮助应对全栈开发挑战。
341 0
|
8月前
|
数据采集 JavaScript 前端开发
浏览器自动化检测对抗:修改navigator.webdriver属性的底层实现
本文介绍了如何构建一个反检测爬虫以爬取Amazon商品信息。通过使用`undetected-chromedriver`规避自动化检测,修改`navigator.webdriver`属性隐藏痕迹,并结合代理、Cookie和User-Agent技术,实现稳定的数据采集。代码包含浏览器配置、无痕设置、关键词搜索及数据提取等功能,同时提供常见问题解决方法,助你高效应对反爬策略。
751 1
|
10月前
|
人工智能 自然语言处理 关系型数据库
DMS+AnalyticDB助力钉钉AI助理,轻松玩转智能问数
DMS+AnalyticDB助力钉钉AI助理,轻松玩转智能问数
436 3
|
12月前
|
API
【HarmonyOS Next】状态管理V2版本使用详解
现阶段状态管理V2版本还在试用阶段,但是切实解决了很多在项目中使用V1导致的痛点问题,比如: * 同一数据被多视图代理时,无法同步数据修改。 * 无法做到深度观测和深度监听。 * 更新对象中某个数据时,会导致整个对象属性都刷新,导致程序运行缓慢。
413 4
【HarmonyOS Next】状态管理V2版本使用详解
|
11月前
|
自然语言处理 机器人 开发者
大模型的综合分析报告
- **性能**:所提及的模型在性能上均表现出色,特别是在语言生成和理解方面。参数规模较大的模型(如DeepSeek-LLM-67B-Chat、Yi-1.5-9B-Chat等)通常能提供更为丰富的语言处理能力。 - **显存**:显存需求因模型参数规模而异,但一般较大规模的模型需要较高配置的硬件支持。 - **生态**:Llama、GLM等模型在开源社区中较为受欢迎,拥有一定的用户基础和生态支持。其他模型可能处于发展初期,生态支持有待加强。 - **更新频率和时间**:具体更新频率可能因开发者团队和模型版本而异。但一般而言,开源模型可能会不断更新以改进性能和功能。 - **效果评估**:在对话
|
Linux
支持exfat和ntfs格式的U盘
该文档提供了在Linux系统中支持exFAT和NTFS格式U盘的方法。首先,通过安装EPEL库(需管理员权限)开始,使用`yum -y install epel-release`命令。接着,对于RHEL/CentOS 7,需添加Nux Dextop仓库并安装exfat支持库,命令为`rpm -Uvh
509 0
|
运维 Devops 应用服务中间件
阿里云云效操作报错合集之从企业仓库里拉取依赖报错403,该如何解决
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
阿里云云效操作报错合集之从企业仓库里拉取依赖报错403,该如何解决