返回顶部
首页 > 资讯 > 数据库 >Mysql update sql引起的生产故障怎么解决
  • 431
分享到

Mysql update sql引起的生产故障怎么解决

2023-06-29 18:06:35 431人浏览 安东尼
摘要

这篇文章主要介绍“Mysql update sql引起的生产故障怎么解决”,在日常操作中,相信很多人在Mysql update sql引起的生产故障怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简

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

故障表现

  • 一方面 :在阿里云控制台云数据库PolarDB对应的集群管理页面上,在诊断与优化模块里面的一键诊断会话管理中,发现某条update sql 执行时间非常久且非常频繁;

  • 另一方面:业务监控系统中开始不断有业务执行时间发出告警信息提示,且告警的业务数据不断上升,部分操作影响客户使用。

业务背景

由于业务操作涉及到的业务流比较复杂,对纯技术的分享来看,不是重点讨论的话,为了更有利于理解问题发生的原因,使用类比的方式,把复杂的业务类比成如下描述: 有数据库3张表,第一张表t_grandfather (爷表),第二张表为t_father(父表),第三张表t_grandson(子孙表),DDL如下:

CREATE TABLE `t_grandfather ` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `count` int(11) NOT NULL DEFAULT 0 COMMENT '子孙后代数量',  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='老爷表';CREATE TABLE `t_father ` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `grandfather_id` int(11) NOT NULL COMMENT '老爷表id',  PRIMARY KEY (`id`),  KEY `idx_grandfather_id` (`grandfather_id`),) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='老爸表';CREATE TABLE `t_grandson` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `grandfather_id` int(11) NOT NULL COMMENT '老爷表id',  PRIMARY KEY (`id`),  KEY `idx_grandfather_id` (`grandfather_id`),) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='孙子表';

三张表之间的业务逻辑关系为,先生成老爷表,然后这个老爷取很多老婆(业务),会不断的生娃,生一个娃就会生成一张老爸表,同时会更新老爷表的count=count+1,表示新增一个后代了,老爷的老婆(业务)在不断的生娃的时候,之前的生的娃也会有老婆,他们的老婆也会生娃,对老爷来说,就是它有了孙子(产生新的业务数据),那有了孙子之后也需要更新老爷表的count=count+1,表示新增一个后代了,以此类推,子子孙孙无穷尽也(业务数据不断生成) 如下图所示:

Mysql update sql引起的生产故障怎么解决

祖传代码的逻辑为,只要是t_father表和t_grandson有新增,就去更新t_grandfather。这个逻辑设计上问题不大,不过考虑到孙子表数据量很猛的时候,这里就会出现一个非常严重的性能问题。以下是业务摘取的一部分伪代码

  public void doFatherBusiness  (){     //do fatherBusiness baba .... 此处省     // 插入 t_father 表    if (fatherMapper.inster(father)){         //update t_grandfather set count=count+1 where id= #{grandfatherId}         grandfatherMapper.updateCount(father.getGrandfatherId  ())  ;     }}  public void doGrandsonBusiness  (){     //do grandson baba .... 此处省略     // 插入 t_grandson 表     if(grandsonMapper.inster(grandson)){          //update t_grandfather set count=count+1 where id= #{grandfatherId}          grandfatherMapper.updateCount(grandson.getGrandfatherId());     }}

当多个业务(线程)分别调用上面的方法时,都会对t_grandfather表的更新操作造成巨大的压力,特别是更新同一个id的情况下,mySQL Server内部对的竞争非常激烈。最后表现出来就如前文背景描述的一致。

解决方案

1. 临时处理方案:

一方面,在阿里云控制台,对sql进行限流,在正常阻塞的会话,强制kill掉,让数据的线程不阻塞着,释放资源,另外一方面,在把接收请求的服务减少节点数,目的是减少业务数据量进入;

2. 长久方案

一方面更改掉上面的业务逻辑,插入t_grandson表和t_father表时,不在去更新t_grandfather表的count字段;另一方面,需要用到count统计需求时,全部切换成别的方式;

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

您可能感兴趣的文档:

--结束END--

本文标题: Mysql update sql引起的生产故障怎么解决

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

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

猜你喜欢
  • Mysql update sql引起的生产故障怎么解决
    这篇文章主要介绍“Mysql update sql引起的生产故障怎么解决”,在日常操作中,相信很多人在Mysql update sql引起的生产故障怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简...
    99+
    2023-06-29
  • 一次Mysql update sql不当引起的生产故障记录
    目录故障表现业务背景解决方案总结故障表现 一方面 :在阿里云控制台云数据库PolarDB对应的集群管理页面上,在诊断与优化模块里面的一键诊断会话管理中,发现某条update sql ...
    99+
    2024-04-02
  • 生产数据库因磁盘空间满而引起的死锁故障及解决方法
    今天就跟大家聊聊有关生产数据库因磁盘空间满而引起的死锁故障及解决方法,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。今天主要介绍一次因磁盘空间满导致的...
    99+
    2024-04-02
  • sql模式设置引起的问题怎么解决
    今天小编给大家分享一下sql模式设置引起的问题怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1 报错类似如下数据库错...
    99+
    2023-06-30
  • MySQL优化index merge引起的死锁怎么解决
    本篇内容介绍了“MySQL优化index merge引起的死锁怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!背景生产环境出...
    99+
    2023-06-30
  • 怎么解决Mysql Sleep线程引发的锁等待故障
    本篇内容主要讲解“怎么解决Mysql Sleep线程引发的锁等待故障”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么解决Mysql Sleep线程引发的锁等待...
    99+
    2024-04-02
  • MyBatis怎么解决Update动态SQL逗号的问题
    这篇文章主要介绍“MyBatis怎么解决Update动态SQL逗号的问题”,在日常操作中,相信很多人在MyBatis怎么解决Update动态SQL逗号的问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MyB...
    99+
    2023-06-28
  • Win7常见启动故障产生的原因及解决方法整理
      相信绝大多数朋友都用上了Win7系统了吧,Win7系统虽然比以前其他版本的Windows系统都稳定得多,但是由于安装某些特殊软件或误操作,系统还是会出现各种启动故障。接下来,笔者就来给大家分析一下Win7常见启动故障...
    99+
    2023-06-02
    win7 启动故障 解决 原因 故障 整理 方法
  • MYSQL字符集不同引起的join无法走索引的问题怎么解决
    本篇内容主要讲解“MYSQL字符集不同引起的join无法走索引的问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MYSQL字符集不同引起的join无法...
    99+
    2024-04-02
  • Ulimit的故障怎么解决
    本篇内容主要讲解“Ulimit的故障怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Ulimit的故障怎么解决”吧!最近遇到一个非常有趣的问题。其中有一组HAProxy,频繁出现问题。登录...
    99+
    2023-06-17
  • merge过程中产生的冲突怎么解决
    在合并(merge)过程中,可能会出现冲突(conflict),即两个或多个分支中对同一部分代码进行了修改,并且这些修改无法自动合并...
    99+
    2023-09-16
    merge
  • JVM优化引起的逻辑错误怎么解决
    这期内容当中小编将会给大家带来有关JVM优化引起的逻辑错误怎么解决,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。public class Test2 {  ...
    99+
    2023-06-17
  • win8.1系统由于tdx.sys文件引起蓝屏的故障原因及解决方法
      Ghost Win8.1系统用户在正常使用的过程中突然出现了蓝屏,查看蓝屏的日志后发现,这个蓝屏是由于tdx.sys文件引起的。tdx.sys是什么文件呢?win8.1系统由于tdx.sys文件引起蓝屏...
    99+
    2022-06-04
    蓝屏 解决方法 故障
  • Git merge过程中产生的冲突怎么解决
    在Git合并过程中,如果两个分支上的相同文件的相同行发生了变更,就会产生冲突。解决冲突的一般步骤如下:1. 打开冲突文件,会看到类似...
    99+
    2023-10-11
    Git
  • MySQL索引的坑怎么解决
    今天小编给大家分享一下MySQL索引的坑怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下...
    99+
    2024-04-02
  • 使用法国服务器发生故障怎么解决
    使用法国服务器发生故障解决的方法:1、应用服务无法正常运行,可以通过远程重启这项服务即可恢复正常;2、服务器硬件故障,需要购买硬件或送到机房进行更换;3、服务器访问量过大导致服务器无法访问,看网站本身营销成功带来的结果或网站结构设计是否合理...
    99+
    2024-04-02
  • 宁波服务器租用发生故障怎么解决
    如果宁波服务器租用发生故障,可以按照以下步骤进行解决:1. 先检查服务器是否正常开机,是否有异常的声音或灯光提示;2. 检查网络连接...
    99+
    2023-06-05
    宁波服务器 服务器
  • sql引用了无效的表怎么解决
    出现SQL引用无效表的问题,一般有以下几种可能的原因和解决方法: 表名错误:检查SQL语句中引用的表名是否正确,可能是拼写错误或...
    99+
    2023-10-26
    sql
  • 物理云服务器使用发生故障怎么解决
    物理云服务器使用发生故障的解决方法:1、网站访问量太大导致使用故障,需要通过升级云服务器配置资源进行解决;2、云服务器中毒,需要做好数据备份,通过重装系统来将系统病毒进行清除;3、受到DDOS和CC攻击,通过升级云服务器配置或接入CDN服务...
    99+
    2024-04-02
  • 由db_domain引起的数据库连接异常怎么解决
    这篇文章主要讲解了“由db_domain引起的数据库连接异常怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“由db_domain引起的数据库连接异常怎...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作