记一次生产事故的排查和解决

news2025/1/12 7:43:56

一. 事故概述

春节期间, 生产系统多次出现假死不可用现象, 导致绝大部分业务无法进行. 主要表现现象为接口无法访问.

背景为900W+客户表和近实时ES, 以及春节期间疫情导致的普通卖菜场景近似秒杀等.

二. 排查过程

优先排查了info, error, catalina日志, 发现以下异常:

1.png

3.png

主要的异常信息为:

Cause: java.sql.SQLException: Lock wait timeout exceeded; 
try restarting transaction

引起该异常通常是由高频行锁或表锁同时操作数据库导致. 上一次事务还未完成, 新的事务尝试获取锁等待超时.

但根本原因是业务涉及缺陷或代码不合理导致的事务无法正常提交或事务体执行时间过长. 引起获取锁等待超时.

参考异常中的业务代码, 如1图中的库存扣减逻辑, 和2图中的购物车逻辑.

  1. 排查代码时发现库存扣减存在业务上设计的不合理, 原业务为在支付回调时扣减库存, 造成超卖现象很严重(甲方允许超卖), 扣减在update语句中实现, 库存字段为unsigned, 所以负数抛出异常导致事务无法正常提交.
  2. 在创建订单时的大事务体中包含购物车删除逻辑, 有很多查询, 创建, 删除操作数据库的逻辑, 在近秒杀场景中, 高频商品的记录被阻塞在事务中, 最终导致其他线程获取锁超时.

三. 解决方案

比较主流的处理方案是查询以下几张表, 删除事务表中无法正常释放的事务锁记录

information_schema.INNODB_TRX;
information_schema.INNODB_LOCKs;
information_schema.INNODB_LOCK_waits;

但基于事故发生的时间和严重程度, 该方案只能治标, 不能治本.

所以根据异常中两处不同的业务代码入手

发现共同点: 均存在大事务代码体, 个别业务存在事务期间刷新ES操作.

解决方案如下:

  1. 异步化刷新ES.
  2. 降低事务体大小和数据库操作, 将非强一致性要求的操作移到事务外.
  3. 酌情去除事务.
  4. 优化畸形代码(特指历史遗留或未经review的脏代码)
  5. 查询类接口考虑读写分离
  6. 利用缓存合理规避高频业务对数据库带来的压力
  7. 对于代码提交做把控, 有效的review可以减少脏代码的产生.

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

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

相关文章

一文掌握Vue依赖注入:原理、应用场景以及最佳模块化与单元测试实践,提升代码的可维护性与模块化程度

Vue 中的依赖注入(Dependency Injection, DI)机制通过 provide 与 inject API,实现了跨组件层级间的数据与服务透明传递,使父组件能够向其任意深度的子孙组件“注入”依赖,而不需要通过层层传递 props 或使用全局状态管…

搭建智能客服机器人设计流程

一、检索型机器人FAQ-Bot 在客服处理的问题中70%都是简单的问答业务,只要找到QA知识库中与用户当前问句语义最相近的标准问句,取出答案给用户就可以了。FAQ-Bot就是处理这类问题的。在没有使用深度学习算法之前,通常采用检索NLP技术处理。 …

如何用智能获客开启新商机?揭秘赢销侠软件的奇效

在当今数字化竞争日益激烈的商业环境中,企业为了生存和发展,必须寻找新的途径以获取潜在客户。智能获客作为一种新型的营销方式,正以其高效、精准的特点改变着传统的市场开拓模式。而在这个过程中,自动获客软件的作用愈发凸显&…

HTML:元素分类

HTML:元素分类 概述块级元素(Block-level Elements)内联元素(Inline Elements)替换元素(Replaced Elements)表单元素(Form Elements) 概述 HTML(HyperText M…

Mysql从入门到精通——Mysql知识点总结(基础篇)

参考视频 黑马程序员 MySQL数据库入门到精通i 题单推荐 入门 进阶 SQL语句类型 DDL:数据定义语言,用来定义数据库对象(数据库,表,字段)DML:数据操作语言,对数据库表中的数据进行增删改DQL:数据查询语言,用来查询数据库中表的…

拓云启航 移动云全网型经销渠道合作伙伴火热招募

2024年4月28日至29日,2024中国移动算力网络大会在苏州召开。28 日下午大会主论坛现场,中国移动发布移动云全新万象算力网络生态合作计划,加速算力网络新质生产力落地。后续,移动云将依托“拓云计划”,招募超万家渠道伙…

JAVA前端快速入门基础_javascript入门(03)

写在前面:本文用于快速学会简易的JS,仅做扫盲和参考作用 本章节主要介绍JS的事件监听 1.什么是事件监听 事件:是指发生在HTML端的事件,主要指以下几种。 1.按钮被点击 2.鼠标移动到元素上 3.按到了键盘 事件监听:当触发了事件时,JS会执行相…

自动驾驶 | 仿真测试-HiL测试全解析

1.HiL 的定义 HiL(Hardware-in-the-Loop)硬件在环是计算机专业术语,也即是硬件在回路。通过使用 “硬件在环”(HiL) ,可以显著降低开发时间和成本。在过去,开发电气机械元件或系统时,使用计算机仿真和实际的实验就已经…

C语言【动态内存】

1.为什么要有动态内存 我们现在掌握的内存开辟方法有: int val 20;//在栈空间开辟4个字节 char str[10]{0};//在栈空间开辟10个字节的连续的空间但是上述的方式有两个点要注意: 1.空间开辟的大小是固定的 2.数组在申明的时候,一定要指定数…

上位机图像处理和嵌入式模块部署(树莓派4b利用驱动实现进程数据共享)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 前面我们讨论过,目前在linux系统上面有很多办法可以实现多进程数据共享。这里面比如说管道,比如说共享内存,比如…

Electron开发 umi react 应用

Electron 是一个跨平台桌面端的应用框架,electron 底层依赖3 个核心组件 Chromium、Node.js、Electron API,Chromium 是 Chrome 的开源版本,Node.js可以编写后台应用程序,集成 Node.js 到 Electron,使得 Electron 可以…

21.哀家要长脑子了!

1.21. 合并两个有序链表 - 力扣(LeetCode) 我做过啊,为什么还是不能独立做出来,为什么为什么啊啊啊 嘻嘻奔向五一 是这样的: 要按升序连接,以链表2头结点作为开端,哪个小就先连接哪个&#xff…

75、堆-前K个高频元素

思路 这道题还是使用优先队列,是要大根堆,然后创建一个类,成员变量值和次数。大根堆基于次数排序。前k个就拿出前k的类的值即可。代码如下: class Solution {public int[] topKFrequent(int[] nums, int k) {if (nums null || …

半导体机台文件导出,如何实现统一管理减轻运维压力?

半导体机台在半导体制造过程中会产生多种数据,这些数据对于设备的运行、监控、优化和故障诊断等方面都具有重要意义。以下是半导体机台可能产生的一些主要数据类型: 工艺控制数据:这包括在制造过程中的各个工艺步骤(如光刻、蚀刻、…

垃圾中转站远程监控运维管理系统解决方案

在城市环卫体系中,垃圾中转站作为连接居民区与末端处理设施的关键节点,其高效稳定运行对于保障城市环境清洁、推动垃圾分类与资源化利用具有重要意义。然而,传统的管理模式往往存在实时监控不足、运维效率低下等问题。 一、设计理念 1. 实时…

【派兹互连·SailWind】美国瞄准“小华为”

有“小华为”之称的海能达遭遇了来自美国方面的压力。 近日,海能达紧急发公告称,公司收到美国法院的判令,临时被禁止在全球范围内销售双向无线电技术的产品,并处以每天100万美元的罚款,直至公司完全遵守禁诉令之时止。…

Go Web开发【xorm 框架】

1、xorm 1.1、xorm 简介 xorm 是一个简单而强大的Go语言ORM库. 通过它可以使数据库操作非常简便。 特性 支持 struct 和数据库表之间的灵活映射,并支持自动同步事务支持同时支持原始SQL语句和ORM操作的混合执行使用连写来简化调用支持使用ID, In, Where, Limit,…

C语言:选择结构

选择结构 1.if 语句1.1.if1.2.if-else1.3.if的嵌套举例示例结果分析 举例示例结果 2.switch语句举例示例结果分析 C语言中的选择结构用于根据特定条件执行不同的代码段。选择结构是C语言编程中实现程序逻辑流程控制的基础,它们能够使程序根据不同的输入或条件执行不…

《霍格沃茨之遗》找不到emp.dll如何修复?分享5种亲测有效的方法

在我们享受电脑游戏带来的乐趣时,偶尔会遇到一些技术上问题,具体来说,当你启动一款游戏,系统却弹出一个提示“由于找不到emp.dll文件,因此无法继续执行代码”,这样的情况确实让人感到扫兴。这究竟是什么原因…

【五一特惠活动】FME视频教程限时回馈大优惠

目录 一、FME视频教程五一限定套餐 二、购买方式 为感谢各位粉丝的持续支持,让大家学好用好FME,轻松工作、少加班,特推出FME视频教程五一限定套餐,套餐包括FME入门视频教程、FME进阶视频教程、FME案例实战教程,总共三…