广告
返回顶部
首页 > 资讯 > 数据库 >怎么解决MySQL主从延迟问题
  • 446
分享到

怎么解决MySQL主从延迟问题

2024-04-02 19:04:59 446人浏览 薄情痞子
摘要

这篇文章主要介绍“怎么解决Mysql主从延迟问题”,在日常操作中,相信很多人在怎么解决mysql主从延迟问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么解决Mysql主

这篇文章主要介绍“怎么解决Mysql主从延迟问题”,在日常操作中,相信很多人在怎么解决mysql主从延迟问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么解决Mysql主从延迟问题”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

主从延迟的原因

1、某用户在使用数据库过程中,出现主从延迟很大的情况,show slave status\G,已经差了60多个binlog了。

怎么解决MySQL主从延迟问题

2、观察发现,应该是卡在一个大事物上面(Retrieved_Gtid_Set一直在上升,但是Executed_Gtid_Set卡在一个点不动了),通过分析relay_log找到这个大事物:是对表A进行删除操作的一个事物。

Relay_Log_File: relay-bin.000010
Relay_Log_Pos: 95133771

怎么解决MySQL主从延迟问题

看到这里,感觉又是一例在ROW模式下表没有主键,引起的主从延迟。看看表结构确认一下,发现这张表不小,字段有上百个,有主键,且是一张分区表,分区很多。这就有意思了!并不是我们碰到过多次的由于ROW模式下没有主键,DML引起的主从延迟(PS:为什么这种情况下会引起延迟?而是有主键,且走了二级索引,那为什么回放还会这么慢呢?)。

怎么解决MySQL主从延迟问题

后来了解到用户是在存储过程里面调用detele语句来进行归档数据清理,看了一下存储过程,现在的问题就可以简化为:在存储过程中调用delete语句,走了二级索引删除有主键的分区表,从机回放延迟。

怎么解决MySQL主从延迟问题

这个时候,我们需要拆解一下问题,控制好变量,一个一个的查:

1、直接执行delete,SQL会以statement的格式出现,且不会产生主从延迟。

怎么解决MySQL主从延迟问题

怎么解决MySQL主从延迟问题

2、调用procedure,该delete语句在procedure中执行的时候会变成ROW格式,且会导致延迟。

OK,有以上两个测试,我们的问题可以聚焦为:

1、为什么同样delete语句,直接执行和在procedure里面执行记录的binlog格式不一样(ROW格式的binlog导致回放慢,全局设置在mixed模式下,这条SQL应该走的是statement格式,为什么在procedure里执行就变成了ROW格式,怎么样才能让这条SQL再procedure里执行变成statement记录到binlog里面)。

delete from xxxxx
where update_datetime < DATE_ADD(B_DATE,INTERVAL -1 day)
and DATE_FORMAT(update_datetime,'%i') not in ('00','05','10','15','20','25','30');

怎么解决MySQL主从延迟问题

通过show processlist,可以看到这条delete在procedure内部执行的时候,被MySQL自动加上了NAME_CONST函数,所以导致了以ROW模式记录binlog格式。那为什么在procedure中会被改写成这样的SQL呢?怎么样才能让这条SQL记录为statement的格式呢?

怎么解决MySQL主从延迟问题

看了MySQL官方在procedure里面的限制描述,MySQL会自动加上NAME_CONST主要是为了从机可以识别到B_DATE这个SP的Local vairable,不至于从机回放的时候报错。

2、为什么ROW模式的binlog在从库回放的时候,即使delete的这张表有主键也很慢。

我们先看一下SQL线程回放是卡在哪里了?为什么会慢?

通过pstack抓取堆栈,找到SQL_thread线程对应的thread 15,再结合perf信息,可以看到从机回放慢是卡在了bitmap_get_next_set()。

怎么解决MySQL主从延迟问题怎么解决MySQL主从延迟问题

看一下bitmap_get_next_set()的代码。

bitmap_get_next_set()都是一些位运算,速度按理来说应该很快。所以不应该是程序卡在了这个函数中,大概率是因为多次调用了这个函数。所以我们再往上层继续看代码。

怎么解决MySQL主从延迟问题

get_next_used_partition(uint part_id) 直接调用了bitmap_get_next_set(),继续往上看。

怎么解决MySQL主从延迟问题

try_semi_consistent_read() 这个函数中出现了可疑的循环,这里会调用m_tot_parts次get_next_used_partition。看了一下定义m_tot_parts是分区表的总分区数!!!

看到这里,就真相大白了。

这个delele的SQL变更的行数大约在300W行左右,总共的分区表数是7200个。那么这里调用bitmap_get_next_set的次数就被放大成了216亿次!

怎么解决MySQL主从延迟问题怎么解决MySQL主从延迟问题

对比以statement格式回放,从机的堆栈信息,并不会进入bitmap_get_next_set。

怎么解决MySQL主从延迟问题

解决方案

分析了这么久,怎么处理这么问题呢?

  • 方案1:我们最后在SP中强制制定了session的binlog_format=statement,让这条delete在从机以statement的模式回放,这样就避免触发MySQL中的这个bug。

  • 方案2:修复内核。

  • 方案3:在shell里面去调度,而不使用存储过程。

到此,关于“怎么解决MySQL主从延迟问题”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

您可能感兴趣的文档:

--结束END--

本文标题: 怎么解决MySQL主从延迟问题

本文链接: https://www.lsjlt.com/news/62391.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL主从延迟问题怎么解决
    本篇内容主要讲解“MySQL主从延迟问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL主从延迟问题怎么解决”吧!什么是主从延迟在讨论如何解决主...
    99+
    2022-10-19
  • 怎么解决MySQL主从延迟问题
    这篇文章主要介绍“怎么解决MySQL主从延迟问题”,在日常操作中,相信很多人在怎么解决MySQL主从延迟问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么解决MySQL主...
    99+
    2022-10-18
  • MySQL主从延迟问题解决
    今天我们就来看看为什么会产生主从延迟以及主从延迟如何处理等相关问题。 坐好了,准备发车! 主从常见架构 随着日益增长的访问量,单台数据库的应接能力已经捉襟见肘。因此采用主库写数据,从库读数据这种将读写分离开的主从...
    99+
    2022-05-11
    mysql 主从 mysql 主从延迟 mysql 主从延迟解决
  • mysql如何解决主从延迟问题
    mysql解决主从延迟问题的方法:在命令行设置参数slave_parallel_workers的值大于0和slave_parallel_type='LOGICAL_CLOCK'。选择合适的分库、分表策略,避免单表单库过大。避免被无用的I/O...
    99+
    2022-10-24
  • MySQL主从数据库同步延迟问题怎么解决
    这篇文章主要讲解了“MySQL主从数据库同步延迟问题怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL主从数据库同步延迟问题怎么解决”吧!My...
    99+
    2022-10-18
  • mysql主从复制延迟问题
    在一般生产环境,普遍通过MySQL的主从复制进行读写分离,从而减轻主服务器的压力,提高数据的读写效率。通常情况下,主从复制基本上能做实时同步。由于服务器实际运行过程中,客户端的连接服务器,读写数据不可能是均...
    99+
    2022-10-18
  • MySQL主从同步延迟怎么解决
    本文主要给大家简单讲讲MySQL主从同步延迟怎么解决,相关专业术语大家可以上网查查或者找一些相关书籍补充一下,这里就不涉猎了,我们就直奔主题吧,希望MySQL主从同步延迟怎么解决这篇文章可以给大家带来一些实...
    99+
    2022-10-18
  • MySQL主从延迟、读写分离问题如何解决
    本文小编为大家详细介绍“MySQL主从延迟、读写分离问题如何解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“MySQL主从延迟、读写分离问题如何解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,...
    99+
    2022-10-19
  • 如何解决MySQL中主从延迟与读写分离的问题
    小编给大家分享一下如何解决MySQL中主从延迟与读写分离的问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!前言:我们都知道互联网数据有个特性,大部分场景都是 读...
    99+
    2023-06-29
  • 教你彻底解决MySQL 5.7 主从复制的延迟问题方法
    本文主要给大家简单讲讲彻底解决MySQL 5.7 主从复制的延迟问题方法,相关专业术语大家可以上网查查或者找一些相关书籍补充一下,这里就不涉猎了,我们就直奔主题吧,希望彻底解决MySQL 5.7 主从复制的...
    99+
    2022-10-18
  • 主从同步的延迟问题、原因及解决方案
    主从同步的延迟问题、原因及解决方案 MySQL的主从同步在实际使用过程中会有从库延迟的问题,那么为什么会有这种问题呢 如何避免这种问题呢 情况一: 从服务器配置过低导致延迟 这类延迟场景的出现往往是主节点拥有较大规格的配置,而只...
    99+
    2023-08-31
    数据库 服务器 mysql Powered by 金山文档
  • MySQL主从延迟原因以及解决方案
    1.MySQL数据库主从同步延迟原理。    谈到MySQL数据库主从同步延迟原理,得从mysql的数据库主从复制原理说起,mysql的主从复制都是单线程的操作(mysql5....
    99+
    2022-10-18
  • 【MySQL】MySQL主从同步延迟原因与解决方案
    文章目录 一、MySQL数据库主从同步延迟产生的原因二、关于DDL和DML三、主从延时排查方法四、解决方案3.1 解决从库复制延迟的问题:3.2 MySql数据库从库同步其他问题及解决方案 一、MySQL数据库主从同步延迟产...
    99+
    2023-08-19
    mysql 数据库 sql
  • mysql主从同步为何延迟及解决办法
    下文主要给大家带来mysql主从同步为何延迟及解决办法,希望这些内容能够带给大家实际用处,这也是我编辑mysql主从同步为何延迟及解决办法这篇文章的主要目的。好了,废话不多说,大家直接看下文吧。2.MySQ...
    99+
    2022-10-18
  • Redis常见延迟问题怎么解决
    这篇“Redis常见延迟问题怎么解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Redis常见延迟问题怎么解决”文章吧。使...
    99+
    2023-07-02
  • 解决python print延迟问题
    最近写了几个python脚本,在用print输出的时候,都有一个很讨厌的问题,就是print的输出被延迟了,什么情况呢,类似这样 1 import os 2 print ‘first print   3 os.system('./seco...
    99+
    2023-01-31
    python print
  • MySQL数据延迟跳动的问题解决
    今天分析了另外一个关于数据库延迟跳动的问题,也算是比较典型,这个过程中也有一些分析问题的方法和技巧工参考。 首先在高可用检测中,有一套环境的检测时断时续,经过排查发现是数据库产生了延迟,在登录到从库show slav...
    99+
    2022-05-16
    MySQL 数据 MySQL 数据延迟跳动
  • MySQL主从复制延迟原因以及解决方案
    来源:公众号「神谕的暗影长廊」 在异步或半同步的复制结构中,从库出现延迟是一件十分正常的事。 虽出现延迟正常,但是否需要关注,则一般是由业务来评估。 如:从库上有需要较高一致性的读业务,并且要求延迟小于某个值,那么...
    99+
    2022-05-16
    MySQL 主从复制 MySQL 主从复制延迟 MySQL 主从复制延迟解决
  • MySQL主从延迟解决方法的归纳和总结
    MySQL主从延迟情况共分为以下四类 一.MIXED模式无索引或SQL慢 在从库上 pager grep -v Sleep;show processlist 查看到正在执行的SQL 解决方法: 1.SQL比...
    99+
    2022-10-18
  • MySQL主从同步延迟的原因及解决办法
    由于历史原因,MySQL复制基于逻辑的二进制日志,而非重做日志。多次被问到何时MySQL能支持基于物理的复制,其实这就看MySQL各位大佬的想法。上次和赖老师脑暴,倏地说道:MySQL会不会来个基于Paxo...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作