一条mysql数据库更新语句

news/2025/10/1 11:44:13/文章来源:https://www.cnblogs.com/DeveloperHan/p/19122298

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

国庆节前下班的时候,生产部门生产完进行入库,这个时候正常跑我们的业务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.mzph.cn/news/923806.shtml

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

相关文章

US$128 Original Wellon VP-299 Programmer

Original Wellon VP-299 Programmer Electrical spec. of the AC adapter: AC input 100V to 240V, 50/60Hz, DC output 9V/0.6A40 Pin ZIF socket pin-drivers.Interface with LAPTOP, PC or compatibles through USB…

凡科建的网站怎么做seometro主题 wordpress

1.背景当多个进程可能会对同样的数据执行操作时&#xff0c;这些进程需要保证其它进程没有在操作&#xff0c;以免损坏数据。通常&#xff0c;这样的进程会使用一个“锁文件”&#xff0c;也就是建立一个文件来告诉别的进程自己在运行&#xff0c;如果检测到那个文件存在则认为…

十堰响应式网站网站开发员纵向发展

【STM32篇】4988驱动步进电机_hr4988-CSDN博客 在上篇文章中使用了HR4988实现了步进电机的驱动&#xff0c;在实际运用过程&#xff0c;HR4988或者A4988驱动步进电机会存在电机噪音太大的现象。本次将向各位友友介绍一个驱动简单且非常静音的一款步进电机驱动IC。 1.DRV8425简介…

浅谈递归入门(1) - 指南

浅谈递归入门(1) - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &…

python+uniapp基于微信小工具的医院陪诊预约系统

python+uniapp基于微信小工具的医院陪诊预约系统pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", …

详细介绍:Nginx 访问控制、用户认证与 HTTPS 配置指南

详细介绍:Nginx 访问控制、用户认证与 HTTPS 配置指南2025-10-01 11:36 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; d…

自有服务器可以做网站吗wordpress游客留言

PAGEPAGE 10北大计算机考研 高等数学真题解答2008 年(5 题 60 分)1 (12 分) f (x) 有连续的二阶导数&#xff0c; f (a)  0 &#xff0c;求limxa1f (x  a)  f (a)1f (a) 。2 (12 分) f (x) 在a,b上连续且 f (a)  f (b)  0 &#xff0c; f (a) f (b) …

最容易做的门户网站动漫设计学校

特点 两线制总线&#xff1a;I2C仅使用两条线——串行数据线&#xff08;SDA&#xff09;和串行时钟线&#xff08;SCL&#xff09;进行通信&#xff0c;有效降低了连接复杂性。多主多从设备支持&#xff1a;I2C支持多个主设备和多个从设备连接到同一总线上。每个设备都有唯一…

comfyui配置

comfyui配置1.通过网盘分享的文件:ComfyUI-aki-v1.2.7z 链接: https://pan.baidu.com/s/168jlRhuu7b0kNgGcjYdInw?pwd=dtm1 提取码: dtm1

哪个网站做相册好海南网

1、为什么 shiro 有了《角色》后&#xff0c;还要设置《角色权限》呢&#xff1f;&#xff08;问题&#xff09; 思考&#xff1a;设置好角色了&#xff0c;那么就代表什么操作都可以执行了吗&#xff1f; 理解&#xff1a;如果上边回答是的话&#xff0c;那么只是《角色》层次…

[深度学习] 大模型学习5-高效微调框架Unsloth使用指北

Unsloth是一个专注于加速大语言模型微调过程的开源项目。它通过一系列底层优化,显著提升了微调速度并大幅降低了内存消耗,同时能保持模型性能。无论是研究者还是开发者,都能借助Unsloth更高效地定制自己的大语言模型…

前端-JavaScript简介JavaScript模块化 - 努力-

前端-JavaScript简介JavaScript模块化前端-JavaScript简介JavaScript模块化一、JavaScript介绍我们已经学习了HTML、CSS的基础内容,我们知道HTML负责网页的结构,而CSS负责的是网页的表现。 而要想让网页具备一定的交…

基本地址变换机构

设页面大小为L,逻辑地址A到物理地址E的变换过程如下 1.计算页号P和页内偏移量W 2.比较页号P和页表大小M如果P>=M则会发生越界中断,否则继续执行。(页号从0开始,页表长度至少为1,因此P=M也会越界) 3.页表中页号…

电子商务网站建设 以为例建设银行官方网站首页个人登录

有许多开源和免费的敏捷管理工具可供敏捷团队使用&#xff0c;以支持他们的敏捷项目管理和开发需求。以下是一些常见的开源/免费敏捷管理工具&#xff1a; 免费敏捷工具 以下是一些免费的敏捷工具&#xff0c;这些工具提供了一定的功能&#xff0c;可用于支持敏捷项目管理和开…

【APK安全】组件安全核心风险与防御指南 - 详解

【APK安全】组件安全核心风险与防御指南 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &…

自己电脑做局域网网站服务器专门做app的公司有哪些

计算机常识 计算机如何存储数据 计算机世界中只有二进制。那么在计算机中存储和运算的所有数据都要转为二进制。包括数字、字符、图片、声音、视频等。 进制 进制也就是进位计数制&#xff0c;是人为定义的带进位的计数方法 实例&#xff1a; // 在java 中 可以使用不同…

中山网站建点东营招标建设信息网

OSPF NSSA实验简述 1、OSPF NSSA区域配置 为解决末端区域维护过大LSDB带来的问题&#xff0c;通过配置stub 区域或totally stub区域可以解决&#xff0c;但是他们都不能引入外部路由场景。 No so stuby area &#xff08;区域&#xff09;NSSA 可以引入外部路由&#xff0c;支持…

书籍网站建设的目的360网站制作潍坊

文章目录1. 题目2. 解题1. 题目 给你一个由正整数组成的数组 nums 。 数字序列的 最大公约数 定义为序列中所有整数的共有约数中的最大整数。 例如&#xff0c;序列 [4,6,16] 的最大公约数是 2 。 数组的一个 子序列 本质是一个序列&#xff0c;可以通过删除数组中的某些元素…

长沙做企业网站的公司wordpress加载谷歌

一、梯度消失与爆炸 在神经网络中&#xff0c;梯度消失和梯度爆炸是训练过程中常见的问题。 梯度消失指的是在反向传播过程中&#xff0c;梯度逐渐变小&#xff0c;导致较远处的层对参数的更新影响较小甚至无法更新。这通常发生在深层网络中&#xff0c;特别是使用某些激活函…

gitee 使用安装教程

一、下载方式 1.官网下载https://git-scm.com/downloads 2.淘宝镜像下载https://registry.npmmirror.com/binary.html?path=git-for-windows/2.1安装 1.点击刚刚下载的安装包,然后点击next 2.根据自己的情况选择,一…