首页 > 数据库 >mysql数据库DeadLock处理分析

mysql数据库DeadLock处理分析

时间:2023-08-17 16:58:27浏览次数:34  
标签:name ## 数据库 innodb mysql DeadLock id select schema

1.问题复现

数据库新建一个test表,里面包含id,和name字段

然后分别开两个窗口,分别开启事务,然后update name字段,不提交,

然后查看一下三个表,看是否出现锁表情况

innodb_trx               ## 当前运行的所有事务
innodb_locks          ## 当前出现的锁
innodb_lock_waits  ## 锁等待的对应关系

窗口1.sql 

start transaction;
update test set name ='zhangsan' where id=1;

窗口2.sql

start transaction;
update test set name ='lisi' where id=2;

窗口3.sql

select * from information_schema.innodb_trx;

select * from information_schema.innodb_locks;

select * from information_schema.innodb_lock_waits;

2.分析代码

修改之前的代码,死锁的这块代码,之前有@Transactional,有事务控制,但是在多线程的情况下,会出现同时修改一张表的情况,而且之前synchronized

关键字加在方法上面,是个对象锁,没有锁住多线程的情况。

             

 后来改成对类加锁,单线程的方式入库,虽然解决是死锁的问题,但是入库性能有所下降,后续还要继续优化。

 

标签:name,##,数据库,innodb,mysql,DeadLock,id,select,schema
From: https://www.cnblogs.com/xsg0011/p/17638056.html

相关文章

  • MYSQL与Hive配置的相关步骤
    1、配置元数据到MYSQL1、新建Hive元数据库登录Mysql:mysql-uroot-p//不加分号创建Hive元数据库:createdatabasemetastore;退出mysql:2、将mysql的jdbc驱动拷贝到hive的lib目录下3、在hive的conf目录下新建hive-site.xml文件vihive-site.xml进入到文件编写模......
  • Mysql分表后同结构不同名称表之间复制数据以及Update语句只更新日期加减不更改时间
    场景SpringBoot+Mybatis+定时任务实现大数据量数据分表记录和查询:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/126225846通过以上分表实现的同结构不同表名之间的表,如何将一个表中的数据复制到另一个表中,且将日期字段进行同样的新增,时间字段不变。注:博客:ht......
  • 国标GB28181视频平台EasyGBS国标平台针对数据库删除级联数据后的无效数据进行优化的具
    EasyGBS国标视频云服务可支持通过国标GB28181协议将设备接入,实现视频的实时监控直播、录像、语音对讲、云存储、告警、级联等功能,同时也支持将接入的视频流进行全终端、全平台分发,分发的视频流包括RTSP、RTMP、FLV、HLS、WebRTC等格式。同时EasyGBS平台也支持海康Ehome协议及SDK等......
  • IDEA社区版+SpringBoot+MyBatisPLus+MySQL实现数据库的保存、查询、修改操作
    一、概述使用IDEA社区+SpringBoot+MyBatisPlus+MySQL实现数据的保存修改与查询。主要记录一下踩坑过程。注意事项:1.社区版IDEA并不能直接创建SpringBoot工程,所以我采用的方式是在Spring官网上,让其帮助我创建一个,创建好后,直接下载。//参考案例https://blog.csd......
  • 使用NineData实现亿级别MySQL大表迁移
    MySQL作为当前应用最广泛的开源关系型数据库之一,具有高性能、稳定性和易用性等特性,是许多网站、应用和商业产品的主要数据存储。在一些场景中,如果出现单表行数上亿的情况,就可能需要开发和DBA对大表进行优化:分表、归档或扩容操作,而在这些操作中都涉及了对数据的迁移。所以,提供高......
  • docker mysql
    dockerpullmysql:8.0.16------------------------------------------------------------------------------------------------------------------------------------------------dockerrun\-p3306:3306\-eMYSQL_ROOT_PASSWORD=123456\-v/home/dock......
  • 数据库连接池为什么要用threadlocal呢?不用会怎样?
    数据库连接池使用ThreadLocal的主要原因是为了保证每个线程都有其独立的数据库连接,这样可以避免多个线程之间的连接干扰,提高系统的稳定性和性能。为什么使用ThreadLocal?线程安全:ThreadLocal可以为每个线程提供一个独立的数据库连接,确保多个线程操作数据库时不会出现资源竞争的......
  • Kettle 连接失败 Oracle 数据库报 ora-12505 的解决方法(转)
      用kettle新建DB连接的时候总是报错,可是用plsql连接是可以连上,错误信息大致如下:错误连接数据库[MIS]:org.pentaho.di.core.exception.KettleDatabaseException:ErroroccuredwhiletryingtoconnecttothedatabaseErrorconnectingtodatabase:(usingclassorac......
  • SSO单点登录(SpringSecurity OAuth2.0 redis mysql jwt)
    SSO单点登录什么是单点登录SSO(SingleSignOn)在多系统架构中,用户只需要一次登录就可以无需再次登录(比如你在打开淘宝之后点击里边的天猫)在以前我们的单系统中,用户如果登录多个服务需要多次登录,实现单点登录之后,可以实现一次登录,全部登录!一次注销,全部注销原理图用户......
  • mysql添加只读账号,virtualBox添加端口映射
    用root用户进入mysqlmysql-uroot-pusemysqlCREATEUSER‘test’@’localhost’IDENTIFIEDBY‘testmm'grantselecton*.*totest@"localhost"Identifiedby"testmm";添加端口转发点击设置弹出 添加端口转发,访问1022端口就是访问虚拟机22端口 附加其它......