一条执行24s的SQL产生7小时主备延时(案例详解)

news2024/9/25 9:30:18

前言

在之前的文章《一条执行24s的SQL竟产生7小时数据延时,数据库高可用做了个寂寞》中,我们描述了一个问题现象:一条在主库执行24秒的SQL语句,却导致了主从延时长达7小时。文章发布后,引发了小伙伴的热烈讨论,很多小伙伴私信我们,希望我们可以再出一篇案例详解。为了帮助大家更直观的理解这一技术问题,本文将通过一个案例深入剖析,希望能给大家带来更清晰的认识。

为了方便清晰的进行跟因分析说明,我们根据客户在生产环境中遇到的实际问题,在我们的开发环境中采用小数据量快速模拟了这一案例。

现象

表结构如下:

CREATE TABLE `task_info` (`name` varchar(32) DEFAULT NULL,`task_params` varchar(128) DEFAULT NULL,`status` varchar(32) DEFAULT NULL,`task_detail` text) ENGINE=InnoDB DEFAULT CHARSET=utf8

通过执行计划,看到表中有80多万条数据,此SQL语句会进行全表扫描。主库上执行此条语句,耗时5.07秒。

图片

从库上执行show salve status\G 可以看到延时达到65秒。

图片

用户分析从库上各种监控指标都很正常,也不存在错误日志锁事件,最终通过DBdoctor看到主从延时开始的时候有一条DELETE语句耗时5秒,感觉比较可疑,猜测可能与这条SQL语句有关系。

图片

原因分析

MySQL的binlog(二进制日志)有三种格式:STATEMENT,ROW和MIXED。

  1. STATEMENT:这是MySQL最早的复制格式,所有的操作都会以SQL语句的形式记录在binlog中。这种格式的优点是binlog文件较小,但是在有些情况下可能会出现主从数据不一致的情况。

  2. ROW:这种格式会记录行的变化,每一行的变化都会记录在binlog中。这种格式的优点是可以避免主从数据不一致的问题,但是binlog文件会非常大。

  3. MIXED:这种格式是STATEMENT和ROW的混合,MySQL会根据操作类型自动选择使用STATEMENT还是ROW。这种格式结合了前两种格式的优点,但是可能会使得binlog文件变得比较大。

主从同步的本质是基于主库的binlog来实现的,主库记录binlog,然后从库将binlog在自己的服务器上重放,从而保证了主、从的数据一致性。

现在使用最广的是ROW格式,并且一些数据同步工具也要求必须将binlog的格式设置为ROW格式,我们这也是使用的ROW格式。

图片

使用MySQL的binlog工具查看,主库上执行的这条删除语句,一共删除了10行数据,在binlog中每行数据分别对应一条日志。

图片

主从同步每行数据在备库进行重放,由于表没有索引,每行数据重放时都会做一次全表扫描,这里10条数据就进行了10次全表扫描,最终导致主从延时65秒。而客户环境一条DELETE语句删除了1000多条数据,则放大了1000多倍,最终导致主从延时7小时。

图片

使用DBdoctor进行SQL审核

接下来我们使用DBdoctor进行SQL审核,发现此表存在严重问题:没有设置主键。设置主键可以提升性能,有效的避免主从延时问题。

图片

总结

小伙伴们,通过本文深入的案例分析,您是否对数据库高可用有了更深刻的理解呢?SQL语句作为数据库操作的核心,其性能优化对系统的稳定性与安全性至关重要。DBdoctor首创的SQL性能审核功能,可重点解决代码开发阶段SQL性能无法真实评估的难题,创新性地提出基于eBPF技术的外置Cost优化器方案。无需在生产环境中执行SQL,即可准确预测其在生产环境中的性能表现,并提供全局最优索引,提前规避故障发生。

***********************************************************************************************************

DBdoctor下载/在线试用:

https://dbdoctor.cn

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2089862.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

zabbix安装过程中仓库不可用问题解决

官网文档安装zabbix-server:Download and install Zabbix 安装zabbix-server过程中碰到如下报错: 导致原因是仓库url被qiang,创建如下仓库: 仓库文件: [centos-sclo-rh] nameCentOS-7 - SCLo rh baseurlhttps://mirr…

6 款 AI 视频全自动国产剪辑软件推荐

这两年刷抖音、B站,你是不是也常看到AI做的视频火得一塌糊涂,流量爆棚,还帮作者赚了钱?那没学过剪辑的你,想不想零成本、零门槛,也用AI软件赚点外快呢?告诉你,绝对行得通!现在AI技术牛了,网上…

顺序表

目录 1. 数据结构 2. 顺序表 1)线性表 2)顺序表分类 3、动态顺序表的实现 1. 数据结构 数据:常见的数值1、2、3、4.....、教务系统里保存的用户信息(姓名、性别、年龄、学历等 等)、网页里肉眼可以看到的信息&…

ARM体系结构及接口技术(四)LED灯实验---Makefile文件解析

文章目录 一、汇编版本二、C语言版本(一)Makefile文件1. .elf文件2. .map文件3. wildcard函数4. patsubst函数 (二)map.lds(三)start.S 一、汇编版本 # 工程名对应的变量 NAMEasm-led# 交叉编译器的前缀的…

十、软件工程基础知识(考点篇)试题

降低需求变更成本,第一想到的就是原型法,后面对于已完成开发工作的的反馈意见,已完成开发工作只有增量式的吧,先开发核心的,然后发布一版,得到用户反馈再修改并开发次核心。快速原型强调的是,先…

BP神经网络学习内容分享:数据降维

在数据分析和机器学习的领域中,数据降维是一项非常重要的技术。它旨在减少数据集中的特征数量,同时尽可能保留原始数据的重要信息。这不仅有助于减少计算复杂度和提高算法效率,还能有效避免过拟合,提升模型的泛化能力。本文将简要…

数学建模--皮尔逊相关系数、斯皮尔曼相关系数

目录 1.总体的皮尔逊相关系数 2.样本的皮尔逊相关系数 3.对于皮尔逊相关系数的认识 4.描述性统计以及corr函数 ​编辑 5.数据导入实际操作 6.引入假设性检验 6.1简单认识 6.2具体步骤 7.p值判断法 8.检验正态分布 8.1jb检验 8.2威尔克检验:针对于p值进行…

【单片机原理及应用】实验:数字秒表显示器

目录 一、实验目的 二、实验内容 三、实验步骤 四、记录与处理 五、思考 六、成果文件提取链接 一、实验目的 熟悉中断和定时/计数器工作原理,掌握定时器的C51编程与调试方法。 二、实验内容 【参照图表】 图A.6 (1)创建一个包含80C51固…

【OWOD论文】开放世界中OD代码_2_模型部分

简介 本文记录OWOD代码中的模型代码部分。数据部分可看我上一个博客【【OWOD论文】开放世界中OD代码_1_数据部分-CSDN博客】 模型代码 1 起步 在代码中找到 detectron2\engine\defaults.py DefaultTrainer类 __init__方法 根据上述 build_model 回溯到 detectron2\modeling\…

OCC笔记:Windows下OCC的编译

一、源码下载 进OCC官网下载https://dev.opencascade.org/release即可,或直接Clone它的Git库https://dev.opencascade.org/resources/git_repository,本文用的源码库版本为7.4.0(我本机安装的VS2013,我又想用到AIS_ViewCube&…

使用Blender云渲染的好处是什么?

​Blender是一款功能强大的开源3D创作软件,用于包括建模、动画、仿真、渲染、合成和视频编辑在内的多种应用。然而,Blender的渲染过程有时可能非常耗费资源,特别是处理复杂的3D场景时。作为CG行业不可或缺的一部分,云渲染通过使用…

chat2DB体验

文章目录 Chat2DB体验的印象Chat2DB是什么?流水帐数据库示例新建数据表生成测试数据查询数据特殊查询 Chat2DB 体验的印象 主页是https://chat2db-ai.com/ 因为最近物理研究需要用到很多数据,所以试用了一个号称神级AI数据库系统。 首先, …

【论文解析】基于脉动阵列的层融合注意力模型加速器结构

作者及发刊详情 刘晓航, 姜晶菲, 许金伟. 基于脉动阵列的层融合注意力模型加速器结构[J]. Computer Engineering & Science/Jisuanji Gongcheng yu Kexue, 2023, 45(5). 摘要 正文 主要工作贡献 1))提出了硬件协同控制的注意力机制矩阵分块方法 2&#xf…

数据仓库系列14:数据清洗和转换的常见方法有哪些?

数据仓库的建立不仅仅是数据的简单存储,更是对数据的深度利用。而数据清洗和转换是确保数据质量和一致性的重要环节。在这篇文章中,我们将深入探讨数据清洗和转换的常见方法,帮助你在数据仓库中更高效地处理数据。 目录 为什么数据清洗和转换…

任务通知笔记

1、任务通知简介 任务通知 用来通知任务的,任务控制块中的结构体成员变量ulNotifiedValue就是这个通知值。 任务通知与队列、信号量和时间标志组的区别 任务通知的优势及劣势 优势 效率更高:使用任务通知向任务发送事件或者数据比使用队列、事件标志…

C语言典型例题56

《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 例题4.8 将范围为100~200的不能被3整除的数输出。 代码&#xff1a; //《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 //例题4.8 将范围为100~200的不能被3整除的数输出。//#include <stdio.h>…

您下一款项目管理工具何必是它,10款软件推荐

国内外主流的 10 款项目管理系统对比&#xff1a;PingCode、Worktile、Teambition、明道云、泛微E-cology、Asana、Trello、Monday.com、ClickUp、Wrike。 在项目管理的世界里&#xff0c;选择合适的管理工具似乎是一个令人头疼的问题。你是否经常在众多选项中感到迷茫&#xf…

AI如何改变科学与数学领域:陶哲轩演讲解析

引言 在当今技术迅猛发展的时代&#xff0c;人工智能&#xff08;AI&#xff09;正逐步渗透到各个领域&#xff0c;其对科学与数学领域的影响尤为引人关注。菲尔茨奖获得者陶哲轩最近在一场演讲中深刻探讨了AI在科学与数学中的应用及其潜在的革命性影响。本文将基于陶哲轩的演…

Goby 漏洞发布|Nacos Jraft 服务文件读取漏洞【已复现】

漏洞名称&#xff1a;Nacos Jraft 服务文件读取漏洞 English Name&#xff1a;Nacos Jraft Services File Read Vulnerability CVSS core: 5.0 漏洞描述&#xff1a; NACOS 是阿里巴巴推出来的一个新开源项目&#xff0c;是一个更易于构建云原生应用的动态服务发现、配置管…

J.U.C Review - Java线程间的通信

文章目录 Java线程间的通信无锁的程序锁与同步等待/通知机制信号量管道 其它通信相关join方法join 方法概述底层实现细节小结 sleep方法1. Thread.sleep 方法详解2. sleep 和 wait 的主要区别3. 实际代码示例 ThreadLocal类ThreadLocal 的基本概念ThreadLocal 的主要方法Thread…