MySQL 优化从库延迟的一些思路

MySQL主从延迟解决方案 在讨论如何解决主从延迟之前,我们先了解下什么是主从延迟。为了完成主从复制,从库需要通过 I/O 线程获取主库中 dump 线程读取的 binlog 内容并写入到自己的中继日志 relay log 中,从库的 SQL 线程再读取中继日志,重做中继日志中的日志,相当于再执行一遍 SQL,更新自己的数据库,以达到数据的一致性。与数据同步有关的时间点主要包括以下三个:1、主库执行完一个事务,写入 binlog,将这个时刻记为 T1;2、之后传给从库,将从库接收完这个 binlog 的时刻记为 T2; 阅读详情

作者:孙绪宗,新浪微博 DBA 团队工程师,主要负责 MySQL、PostgreSQL 等关系型数据库运维。

爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。

本文约 1000 字,预计阅读需要 3 分钟。

引言

在数据库运维过程中,无论是迁移扩容还是生产投量,都必不可少的会遇到从库迁移追不上的问题。这些问题令人头疼。

以下列举几个我个人遇到过的原因:

  • buffer_pool 设置过大,导致 MySQL 使用 SWAP
  • 备份导致 SQL_THREAD 回放等待 MDL
  • 大事务
  • 慢查询导致从库性能低下
  • 并行复制导致从库延迟监控一直为 1s
  • 网络问题

具体情况具体分析,这里不赘述。

如果你在常规排查之后,依然无法解决。接下来,我将根据自身的一些经验,提供一些参数调整思路,供大家参考。

思路一:sync 相关

我们在追延迟的情况,可以调整一下参数,增加日志落盘效率。后续上线从库可以再设置回来。

sync_binlog=0
sync_master_info=10000 #default
sync_relay_log=10000 #default
sync_relay_log_info=10000 #default

思路二:buffer 和并发等相关

可以考虑增加一下 buffer_pool,SQL_THREAD 回放执行的更快。

如果内存空间不足的话,可以适当调整 change buffer 的比例(前提是无读,正常情况下延迟库均为无业务连接)。

innodb_buffer_pool_size=24G #24*1024*1024*1024
innodb_change_buffer_max_size=50
innodb_thread_concurrency=0
innodb_adaptive_hash_index=0

增大 innodb_buffer_pool_size 风险点:

  1. 内存过度分配导致 SWAP 触发或 OOM,需预留足够内存给系统和 MySQL 其他组件,建议缓冲池不超过物理内存的 70%;
  2. 调整需分步进行,结合系统内存监控,避免一次性设置过大。

思路三:slave 相关

考虑开启并行复制

开启并行复制,8.0+ 版本考虑用 writeset。复制线程可以多观察一下,如果没够的话,可以考虑增加。但不建议超过 CPU 核心数或者 innodb_thread_concurrency 参数值。

slave_preserve_commit_order 会加一层锁,追延迟的时候建议关闭,后续上线从库可以再打开。

slave_parallel_type=LOGICAL_CLOCK
slave_parallel_workers=16
slave_preserve_commit_order=OFF

个人不建议修改以下参数,性能虽然会有所增长,但同时会导致主库 commit 等待。当然部分非实时类业务可以调整。

binlog 的组提交的两个有关参数:

  • binlog_group_commit_sync_delay 参数,表示延迟多少微秒后才调用 fsync 刷盘;
  • binlog_group_commit_sync_no_delay_count 参数,表示累积多少次以后才调用 fsync。

考虑关闭 log_slave_updates

log_slave_updates 这个需要重启生效。但是有 gdb 经验的小伙伴可以 gdb 修改,不需要重启,只需要重启 slave 复制即可生效。无 gdb 经验可能会导致 crash 不建议。

同时注意需要了解架构,没有 binlog 备份或者级联库,且无业务连接,建议可以关闭。

思路四

MGR 架构可以考虑先改为异步复制,关闭 slave_preserve_commit_order,待延迟追完后再加入到集群。

思路五

其他性能参数按照模板理论上不会有太大问题,这套操作下来延迟大概率会有所下降,降为 0 只是时间问题。

附录

并行复制积压日志解析:

2021-01-10T16:08:39.947611+08:00 85441 [Note] Multi-threaded slave statistics for channel '';seconds elapsed = 120;events assigned = 4005889;worker queues filled over overrun level = 0;waited due a Worker queue full = 0;waited due the total size = 0;waited at clock conflicts = 6918018179200 waited (count) when Workers occupied = 0 waited when Workers occupied = 0
--------------------------------
Multi-threaded slave statistics for channel ”:
seconds elapsed = 120; 每隔120s输出
eventsassigned = 4005889; 总共有多少个event被分配执行
queues filled over overrun level = 0; 多线程同步中,worker 的私有队列长度超长的次数
waited due aWorker queue full = 0; 因为worker的队列超长而产生等待的次数
waited due the total size = 0; 超过最大size的次数
waited at clock conflicts= 6918018179200;因为逻辑时间产生冲突的等待时间,单位是纳秒
waited (count) when Workers occupied = 0 因为workder被占用而出现等待的次数。(总计值)
waited when Workers occupied = 0 因为workder被占用而出现等待的总时间,总计值,单位是纳秒
中宏安科技、安乾国际大数据(2026.1.5) 比如线上 Java 应用 CPU 占用 100%,我通过 top+jstack 定位到死循环线程,先设置 CPU 亲和性应急,再协同研发修复代码,最终 CPU 占用降至 15%;还有一次 MySQL 磁盘 IO 打满,我调整了 innodb 刷盘参数和文件系统挂载选项,结合 SQL 索引优化,让慢查询减少 80%。在本地测试环境用日志分析(/var/log/)、进程追踪(ps/top)解决过服务启动失败、磁盘满导致的应用卡顿问题。在过往的运维工作中,我主要针对。,确保调优不影响业务稳定性。 阅读详情

相关推荐

MySQL5.7主从延迟高排查优化思路

MySQL主从同步高延迟问题排查与解决 问题描述:基于GTID的MySQL 5.7.32主从环境,出现从库同步延迟高达4784150秒,执行50-100万数据的DELETE语句耗时异常。 排查思路: 检查从库状态和事务,发现存在长时间运行的DELETE大事务 服务器资源监控显示CPU使用正常但磁盘IO异常 使用fio工具测试SSD磁盘性能,发现: 磁盘利用率达99.91%,接近满负荷 读取IOPS 6810,写入IOPS 2665 读取吞吐112MB/s,写入47.9MB/s 解决方案: 优化大事务处理 检

菜鸟运维升级之路 1160

MySQL复制从库延迟优化思路

* GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。1、什么是MySQL复制延迟?本质是MySQL从库的relay log回放跟不上主库生成速度,产生延迟2、主从延迟常见的原因有哪些?1、大事务,从库回放时间较长,导致主从延迟2、主库写入过于频繁,从库回放跟不上3、参数配置不合理4、主从硬件差异5、网络延迟6、表没有主键或者索引大量频繁的更新7、一些读写分离的架构,从库...

老叶茶馆 429

MySQL主从延时优化

• mysql5.5:不支持并行复制,大伙快升级MySQL版本; • mysql5.6:按照库并行复制,建议使用“多库”架构; • mysql5.7:按照GTID并行复制;

mysql存在主从延迟较高,该如何解决?

在日常开发中,有时出现mysql主从延迟较高的情况,现提供排查思路及解决方案,具体如下:1.检查从库数量,大部分公司采用一主多从的配置方案,但当从库数量过多时,可导致主从延迟过高,建议从库数量在2-3个左右为宜,最多不要超过5个。2.检查从库机器配置,硬件是否达到基本要求。3.检查是否存在慢SQL,优化SQL查询,在SQL优化层面,可根据执行计划进行SQL优化,检查索引命中情况。4.检查从库配置,将从库的sync_binlog设置为0或者关闭binlog,innodb_ flushlog, innodb f

qq_35984787的博客 2296

U型槽微带贴片天线:从理论公式到带宽扩展实战

本文深入探讨了U型槽微带贴片天线的设计与带宽扩展实战。针对传统微带天线带宽窄的痛点,详细解析了通过引入U型槽形成双谐振点以拓宽带宽的原理,并提供了从MATLAB理论计算、ANSYS HFSS仿真建模到参数优化的一站式工程指南。文章还分享了多种带宽扩展组合技巧及仿真与实测避坑经验,助力射频工程师设计出高性能的宽带微带天线。

weixin_29168153的博客 447

实验六 存储器实验

只读存储器(ROM)是一种在正常工作时其存储的数据固定不变,其中的数据只能读出,不能写入,即使断电也能够保留数据,要想在只读存储器中存入或改变数据,必须具备特定的条件。当地址为00000101时,会分别在数据位宽为8,16,32的只读寄存器中找到地址为00000101所对应的十进制地址位置,也就是地址为5的数据,并将其分别以8位,16位,32位输出。因此,输出保持为0。因此,当异步清零信号为1时,无论其他输入信号是什么,触发器的输出都会被强制清零,输出为0。1)寄存器输入0011,使能端1,异步清零0。

wenmou1111的博客 3004

MySQL主从复制延迟问题的常见原因与优化方案

MySQL主从复制是构建高可用数据库架构的基础技术,广泛应用于读写分离、数据备份和负载均衡等场景。

weixin_44250247的博客 387

从选卡到验证:CST仿真GPU加速全流程实战指南

本文详细介绍了CST仿真中GPU加速的全流程实战指南,从硬件选型到软件配置,再到性能验证和常见问题排查。通过对比专业卡与游戏卡的性能差异,提供硬件选型建议,并分享驱动安装、关键设置及CST软件配置的黄金法则,帮助用户显著提升仿真效率。

weixin_30650039的博客 394

MySQL主从复制延迟原因及处理思路

在异步或半同步的复制结构中,从库出现延迟是一件十分正常的事。 虽出现延迟正常,但是否需要关注,则一般是由业务来评估。 如:从库上有需要较高一致性的读业务,并且要求延迟小于某个值,那么则需要关注。 首先,简单概述一下复制...

cq377078944的博客 908

2025年普通人转向人工智能运维(AIOps)学习建议(附最新技术实践与资源)

AIOps不仅是技术的叠加,更是运维流程的重构。建议通过“学习-实践-反馈”循环,逐步从工具使用者成长为解决方案设计者。如需完整资源链接,可访问上述推荐的优快云博客及GitHub仓库。

资深全栈架构师,乐于在 优快云 分享技术见解,与大家携手共进,共攀技术巅峰! 3096

GitHub工业级开源利器:StreamPipes如何简化工业物联网数据分析

Apache StreamPipes是一款GitHub上的工业级开源利器,旨在简化工业物联网数据分析。它通过图形化界面连接各类工业协议数据源,以拖拽方式构建流处理管道,并实现实时可视化,有效降低了数据分析的技术门槛,让业务人员也能自助完成从数据接入到洞察的全流程。

weixin_29279153的博客 186

mysql从盘延迟_MySQL主从复制延迟原因以及解决方案

来源:公众号「神谕的暗影长廊」在异步或半同步的复制结构中,从库出现延迟是一件十分正常的事。虽出现延迟正常,但是否需要关注,则一般是由业务来评估。如:从库上有需要较高一致性的读业务,并且要求延迟小于某个值,那么则需要关注。简单概述一下复制逻辑:1、主库将对数据库实例的变更记录到binlog中。2、主库会有binlog dump线程实时监测binlog的变更并将这些新的events推给从库(Maste...

weixin_30258621的博客 209

排队论在食堂窗口规划中的应用:M/M/S模型优化案例

本文通过食堂窗口规划的真实案例,详细阐述了如何运用排队论中的M/M/S模型量化服务效率。文章从问题拆解、数据采集、模型计算到成本效益分析,提供了完整的数学建模实战指南,帮助读者掌握利用最优化方法解决资源配置问题的核心流程与工具。

docker7nomad的博客 1084

mysql做主从复制不停主_MySQL主从复制延迟原因及处理思路

来源:公众号「神谕的暗影长廊」在异步或半同步的复制结构中,从库出现延迟是一件十分正常的事。虽出现延迟正常,但是否需要关注,则一般是由业务来评估。如:从库上有需要较高一致性的读业务,并且要求延迟小于某个值,那么则需要关注。简单概述一下复制逻辑:1、主库将对数据库实例的变更记录到binlog中。2、主库会有binlog dump线程实时监测binlog的变更并将这些新的events推给从库(Maste...

weixin_30588427的博客 311

AutoSAR从0开始实战 --- 目录

​​​​​​本专栏是全网最真实的AutoSAR实战专栏,博主将从一个0基础小白的身份来讲解AutoSAR工具的配置,以及相应代码的讲解。

wj博客 1729

机器学习项目实战案例数据集

本专栏整理了《机器学习项目实战案例》,内包含了各种不同的机器学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集。

优快云 精品推荐 3638

mysql主从复制延迟原因_MySQL主从复制延迟原因以及解决方案

来源:公众号「神谕的暗影长廊」在异步或半同步的复制结构中,从库出现延迟是一件十分正常的事。虽出现延迟正常,但是否需要关注,则一般是由业务来评估。如:从库上有需要较高一致性的读业务,并且要求延迟小于某个值,那么则需要关注。简单概述一下复制逻辑:1、主库将对数据库实例的变更记录到binlog中。2、主库会有binlog dump线程实时监测binlog的变更并将这些新的events推给从库(Maste...

weixin_35204634的博客 655

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

mysql update 并发 慢_MySQL主从复制延迟原因及处理思路

来源:公众号「神谕的暗影长廊」在异步或半同步的复制结构中,从库出现延迟是一件十分正常的事。虽出现延迟正常,但是否需要关注,则一般是由业务来评估。如:从库上有需要较高一致性的读业务,并且要求延迟小于某个值,那么则需要关注。简单概述一下复制逻辑:1、主库将对数据库实例的变更记录到binlog中。2、主库会有binlog dump线程实时监测binlog的变更并将这些新的events推给从库...

weixin_39667041的博客 779

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

mysql主从延迟

延迟原因 主库是多进程,从库是单进程(回放relaylog),在高并发的情况下,从库往往比主库执行得慢,所以会出现延迟。 解决办法 通过业务分库,变向将从库变为多进程方式执行同步: 方法一 按业务对库表进行划分,分别部署到不同的从库服务器上,主库就变为多进程并行作业了。 利用一致性hash来保证某个库的更新操作落在同一个从库进程上,具体算法:库名hash之后再模上进程数便得到进程序...

weixin_40213018的博客 405

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

AliSQL实战:MySQL主从复制延迟诊断与内核优化

在数据库运维中,主从复制是保障高可用与读写分离的基石,然而复制延迟问题始终是DBA面临的核心挑战。理解MySQL复制原理,掌握从库回放机制,是定位延迟根源的基础。传统排查依赖瞬时状态,难以捕捉趋势,而基于指标采集与异常检测的诊断思路能更高效地识别瓶颈。无论是网络传输、大事务执行,还是单线程回放能力不足,都需要系统化的分析与优化策略。AliSQL作为MySQL的专业分支,通过增强并行复制调度、优化DDL处理及更细粒度的状态暴露,显著提升了从库回放吞吐。结合合理的参数调优,如调整并行worker数量与组提交策略

weixin_26905487的博客 339

MySQL主从同步面试核心20问:从原理到实战深度拆解

主库:事务提交后生成binlog,由Dump线程发送给从库(连接信息)、(执行进度):主库提交事务后立即响应客户端,不等待从库确认(高性能,可能丢数据):依赖binlog文件名和position,切换主库需手动对齐。

dblens_com的博客 1160

千万级播放上报,每秒上百次更新 MySQL?高并发写数据库压垮 DB,这套合并写方案直接封神

首先,我们要定义一个工具类,帮助我们改造整个业务。在提交学习记录业务中,需要用到异步任务和缓存的地方有以下几处:因此,我们的工具类就应该具备上述4个方法:① 添加播放记录到Redis,并添加一个延迟检测任务到DelayQueue② 查询Redis缓存中的指定小节的播放记录③ 删除Redis缓存中的指定小节的播放记录④ 异步执行DelayQueue中的延迟检测任务,检测播放进度是否变化,如果无变化则写入数据库@Slf4j@Component。

xwhxy的博客 208

[知识补全计划]MySQL分页查询优化之延迟查询

是数据库查询优化中的一种技术,主要用于解决分页查询(尤其是深度分页)的性能问题,通过减少回表操作和扫描数据量来提升效率。,利用覆盖索引先定位目标行的主键,再通过主键回表获取完整数据。

m0_73762612的博客 1880

主从延迟调优思路

本质是从库的回放跟不上主库,回放阶段的延迟回顾MySQL并行复制的路程MySQL5.6 是基于数据库级别的并行复制slave-parallel-type=DATABASE(不同库的事务,没有锁冲突)MySQL5.7 基于group commit的并行复制slave-parallel-type=LOGICAL_CLOCK : Commit-Parent-Based模式(同一组的事务[last-commit相同]没有锁冲突. 同一组,肯定没有冲突,否则没办法成为同一组)

GreatSQL2021的博客 1183
上一篇: SCALE | 2025 年 12 月《大模型 SQL 能力排行榜》发布
下一篇: 区分 FUD 和现实:MySQL 真的被放弃了吗?
爱可生开源社区
博客等级 码龄8年 1937粉丝 1004原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值