当前位置: 首页 > news >正文

一条mysql数据库更新语句

发生场景:车间产出记录进行出库

国庆节前下班的时候,生产部门生产完进行入库,这个时候正常跑我们的业务XXXX——直接到根据单件档案的单件号更新单件档案上的最终用户信息时候出现了问题,跑着跑着就超时,这个时候就进行问题排查

1、首先怀疑是大量数据操作时候怀疑是不是有锁表情况发生,但是跟踪了下数据库并没有发生锁表的现象
2、排除锁表情况,然后开始跟踪整个业务的sql,排查哪条sql出现了超时
3、最终排查到是一条更新语句,回写最终用户时候那条update 超时了,在执行到第51s时候出现等待超时nnodb_lock_wait_timeout

原因分析

先来看下这条更新的sql,其中使用了case when

<update id="updateSn">update a1<trim prefix="set" suffixOverrides=","><trim prefix="C01 =case" suffix="end,"><foreach collection="list" item="i" index="index"><if test="i.sn != null">when a1.sn = #{i.sn} then #{i.finalUser,jdbcType=VARCHAR}</if></foreach></trim><trim prefix="C02 =case" suffix="end,"><foreach collection="list" item="i" index="index"><if test="i.sn != null">when a1.sn = #{i.sn} then #{i.cpType,jdbcType=VARCHAR}</if></foreach></trim></trim>where a1.sn in<foreach collection="list" item="i" index="index" open="(" separator="," close=")">#{i.sn,jdbcType=VARCHAR}</foreach></update>

原因是list里面有上万条数据,就会造成如下情况

update a1
set C01 = case when a1.sn = 'SN001' then '张三' when a1.sn = 'SN002' then '李四' ......................end,C02 = case when a1.sn = 'SN001' then '类型A' when a1.sn = 'SN002' then '类型B' ......................end
where a1.sn in ('SN001', 'SN002',.........)

排查说明

从而造成的直接原因就是这条更新语句太过庞大,执行50s后依然没有能结束,那么就会出现超时的异常,原因是UPDATE 语句在执行时会对涉及的行 / 表加锁(InnoDB 引擎默认行级锁),如果其他事务已持有相关锁(如未提交的更新、删除操作),当前 UPDATE 会进入锁等待状态。当等待时间超过 innodb_lock_wait_timeout(默认 50 秒)时,就会触发超时(Lock wait timeout exceeded 错误)

select操作一般不会有这个情况,因为默认情况下(非 FOR UPDATE 或 LOCK IN SHARE MODE),InnoDB 使用快照读(借助 MVCC 机制),不会加锁,也不会等待其他事务释放锁,因此可以长时间运行而不触发锁等待超时

这个时候修改代码来不及,因为不能让系统重启,所以让业务部门减少数据量,分批操作。。。。方法可能比较笨,但是能保证业务顺利入库,进行后续操作

后续优化

数据量太大,分批次执行,每次1000条更新一次

这样写的有点

http://www.rkmt.cn/news/14530.html

相关文章:

  • 浅谈递归入门(1) - 指南
  • python+uniapp基于微信小工具的医院陪诊预约系统
  • comfyui配置
  • [深度学习] 大模型学习5-高效微调框架Unsloth使用指北
  • 2025工业网线厂家权威推荐榜:千兆/拖链/高柔/网线/六类/超五类/6类/超5类/千兆/超六类/8芯/4芯/成品/相机/视觉数据工业网线高强屏蔽与稳定传输实力之选
  • docker build 时报错 Error fail to solve
  • TCP的学习 - 实践
  • 24届(华为OD)Java面经 - 教程
  • 2025上海骨灰盒哪里买优质厂家权威推荐榜:匠心工艺与品质服务之选
  • 实用指南:华为 HCIA-Datacom 备考:VRP 通用路由平台原理-实操
  • Voice Agent Camp 结营!完整项目名单公布丨超音速计划 2025
  • 2025上海寿衣哪里买权威推荐:优质供货商与暖心服务之选
  • 从零开始学神经网络——CNN(卷积神经网络) - 实践
  • 303、杂诗
  • 完整教程:第三方软件测试公司:【Gatling基于Scala的开源高性能负载测试工具】
  • 深入解析:【项目】Vision Master OpenCV 3.0 版本(预)发行说明
  • Adobe Acrobat Pro DC 2025版破解版下载及安装使用教程
  • 网页访问速度很慢,远程仓库调用很慢
  • 便宜的 VPS
  • 【JavaScript 性能优化实战】第六篇:性能监控与自动化优化 - 指南
  • 某商业银行项目管理建设演进报告 - 指南
  • 2025西安新房住宅推荐排行榜发布,房屋品质、周边配套、交通便利性多维度选择指南!
  • 词(持续更新)语言的边界就是
  • Group Theory (I)
  • 2025年真空机厂家推荐榜:平台式真空封口机,拉伸膜真空覆膜机,全自动拉伸膜真空包装机,滚动连续式真空包装机,双面拉伸真空包装机公司实力甄选指南
  • 【半导体物理 | 笔记】第五章 非平衡载流子
  • 【AHK】暗黑3助手,加强版鼠标宏
  • 第36赛季:地狱魔王9月12日开启
  • 【黑马python】2.Python基础知识-注释 数据类型 运算符 字符串等
  • Educational Codeforces Round 135 (Rated for Div. 2)