当前位置:首页 > 科技  > 软件

避免锁表:为Update语句中的Where条件添加索引字段

来源: 责编: 时间:2024-05-27 08:57:35 287观看
导读最近在灰度环境中遇到一个问题:某项业务在创建数据时耗时异常长,但同样的代码在预发环境中并未出现此问题。起初我们以为是调用第三方接口导致的性能问题,但通过日志分析发现第三方接口的响应时间正常。最终,我们发现工单

最近在灰度环境中遇到一个问题:某项业务在创建数据时耗时异常长,但同样的代码在预发环境中并未出现此问题。起初我们以为是调用第三方接口导致的性能问题,但通过日志分析发现第三方接口的响应时间正常。最终,我们发现工单表的数据入库SQL一直处于等待状态。深入分析后,问题的核心暴露出来:另一业务流程中对工单表执行更新(UPDATE)操作的SQL,其where子句中涉及的字段缺少必要的索引,导致其他业务在操作表中的数据时需要等待该更新完成。今天就和大家分享一下这个经验。sRI28资讯网——每日最新资讯28at.com

问题描述

mysql 修改数据时,如果where条件后的字段未加索引或者未命中索引会导致锁表。这种锁表行为会阻塞其他事务对该表的访问,显著降低并发性能和系统响应速度。sRI28资讯网——每日最新资讯28at.com

问题复现

我们在本地准备环境复现下,本地环境mysql使用的版本时8,首先准备一张表bus_pages,除了主键不创建其它索引,准备两个接口,一个修改,一个新增sRI28资讯网——每日最新资讯28at.com

@Service@Slf4jpublic class BusTestServiceImpl implements BusTestService {    @Resource    private BusPagesService busPagesService;    @Override    @Transactional(rollbackFor = Exception.class)    public void updateInfo() {        StopWatch sw = new StopWatch();        sw.start();        log.info("修改方法执行开始");        LambdaUpdateWrapper<BusPagesEntity> updateWrapper = new LambdaUpdateWrapper();        updateWrapper.eq(BusPagesEntity::getMarkId,18);        updateWrapper.set(BusPagesEntity::getPage,LocalDateTime.now().toString());        busPagesService.update(updateWrapper);        try {            Thread.sleep(40*1000);        } catch (InterruptedException e) {            throw new RuntimeException(e);        }        sw.stop();        log.info("修改方法执行结束,耗时{}s",sw.getTime(TimeUnit.SECONDS));    }    @Override    public void saveInfo() {        StopWatch sw = new StopWatch();        sw.start();        log.info("新增方法执行开始");        BusPagesEntity busPagesEntity = new BusPagesEntity();        busPagesEntity.setPage(LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_TIME));        busPagesService.save(busPagesEntity);        sw.stop();        log.info("新增方法执行结束,耗时{}s",sw.getTime(TimeUnit.SECONDS));    }}

我们首先调用修改方法,然后在调用新增方法,可以看到新增的接口会一直等待修改的接口完成之后才会执行完成。sRI28资讯网——每日最新资讯28at.com

图片图片sRI28资讯网——每日最新资讯28at.com

然后我们给表bus_pages的mark__id字段创建索引sRI28资讯网——每日最新资讯28at.com

图片图片sRI28资讯网——每日最新资讯28at.com

然后在执行修改及新增接口,可以看到新增接口不会在等待修改接口执行完在去执行了sRI28资讯网——每日最新资讯28at.com

图片图片sRI28资讯网——每日最新资讯28at.com

注意: 并不是创建了索引就不会锁表,当我们的索引失效时,也会锁表sRI28资讯网——每日最新资讯28at.com

命令行查看(mysql版本8.0)

  • 查看被锁定的表
show OPEN TABLES where In_use > 0;

此命令用于列出当前正在使用中的表,也就是说那些被锁定或正在进行某些操作(如读写操作)的表。sRI28资讯网——每日最新资讯28at.com

  • 查看正在等待锁资源的查询
select * from performance_schema.data_lock_waits;
select * from sys.innodb_lock_waits;
  • 查看锁定数据
select * from performance_schema.data_locks;
  • 查看正在运行中的事务或命令的详情
select * from information_schema.innodb_trx;

总结

在编写Update语句时,务必注意Where条件中涉及的字段是否有索引支持。避免全表锁的关键在于优化查询,利用索引提高查询效率,减少系统性能的影响。通过合理地设计索引,并确保Update语句中的Where条件包含索引字段,可以有效地提升数据库的性能和并发能力。sRI28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-90859-0.html避免锁表:为Update语句中的Where条件添加索引字段

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Java Nio FileChannel堆内堆外数据读写全流程分析及使用

下一篇: Go语言:利用Govaluate构建规则配置引擎

标签:
  • 热门焦点
  • vivo TWS Air开箱体验:真轻 臻好听

    在vivo S15系列新机的发布会上,vivo的最新款真无线蓝牙耳机vivo TWS Air也一同发布,本次就这款耳机新品给大家带来一个简单的分享。外包装盒上,vivo TWS Air保持了vivo自家产
  • 8月总票房已突破10亿!《封神》第一:口碑已经成了

    8月5日消息,据灯塔专业版数据,截至8月5日9时35分,8月总票房(含预售)已突破10亿。其中,《封神》以大比分的优势领先。根据官方消息,目前该片总票房已经超过14.
  • 0糖0卡0脂 旭日森林仙草乌龙茶优惠:15瓶到手29元

    旭日森林无糖仙草乌龙茶510ml*15瓶平时要卖为79.9元,今日下单领取50元优惠券,到手价为29.9元。产品规格:0糖0卡0脂,添加草本仙草汁,清凉爽口,富含茶多酚,保留
  • JavaScript 混淆及反混淆代码工具

    介绍在我们开始学习反混淆之前,我们首先要了解一下代码混淆。如果不了解代码是如何混淆的,我们可能无法成功对代码进行反混淆,尤其是使用自定义混淆器对其进行混淆时。什么是混
  • 微信语音大揭秘:为什么禁止转发?

    大家好,我是你们的小米。今天,我要和大家聊一个有趣的话题:为什么微信语音不可以转发?这是一个我们经常在日常使用中遇到的问题,也是一个让很多人好奇的问题。让我们一起来揭开这
  • 在线图片编辑器,支持PSD解析、AI抠图等

    自从我上次分享一个人开发仿造稿定设计的图片编辑器到现在,不知不觉已过去一年时间了,期间我经历了裁员失业、面试找工作碰壁,寒冬下一直没有很好地履行计划.....这些就放在日
  • JVM优化:实战OutOfMemoryError异常

    一、Java堆溢出堆内存中主要存放对象、数组等,只要不断地创建这些对象,并且保证 GC Roots 到对象之间有可达路径来避免垃 圾收集回收机制清除这些对象,当这些对象所占空间超过
  • 荣耀Magicbook V 14 2021曙光蓝版本正式开售,拥有触摸屏

    荣耀 Magicbook V 14 2021 曙光蓝版本正式开售,搭载 i7-11390H 处理器与 MX450 显卡,配备 16GB 内存与 512GB SSD,重 1.48kg,厚 14.5mm,具有 1.5mm 键盘键程、
  • Windows 11发布,微软一改往常对老机型开放的态度

    距离 Windows 11 发布已经过去一周,在过去一周里,很多数码爱好者围绕其对 Android 应用的支持、对老机型的升级问题展开了激烈讨论。与以往不同的是,在这次大
Top