美文网首页
Mysql隐式转换带来的生产问题

Mysql隐式转换带来的生产问题

作者: 我叫罗大大 | 来源:发表于2021-02-14 22:33 被阅读0次
问题场景:

​ JDK1.8 + Mysql 5.7 + RocketMq

​ 最近上线一个项目,上线之后看日志发现程序不断的报错"Lock wait timeout exceeded; try restarting transaction"(事务回滚异常,等待超时).一开始一脸懵逼,之前完全没遇到过这种错误.于是,马上开始查看出错的生产库数据是否正确. 查看了一番后,部分数据正常,部分数据缺失了.后来大概23:00左右,这种错误慢慢的少了...作为萌新,询问了组内大佬,组内大佬给的解释是 代码的sql里面使用了 replace into语法,这是一个间隙锁,导致了锁表异常.
由于当晚没有再出现这种情况,暂时没有解决,等到第二天再看看.
​ 第二天一到公司.,打开日志发现又不断的出现了该现象"Lock wait timeout exceeded; try restarting transaction", 因为没有碰到过,查了很多资料,还是不知道如何解决. 突然此时DBA找了过来,说数据库cpu飙升90%,一说可能使我们的代码导致的,于是...

问题分析:

​ 前面问题的场景当然只是作为一个萌新的无助,不知道如何去排查. 首先出现该问题的原因是由于数据库锁表了,高并发的DML(update)操作,导致后一个DML操作处于等待重试状态,大量的操作处于等待之中,导致数据库cpu飙升.
找到这个宏观的原因之后,接着查看自己的代码问题,锁定问题为一个update语句导致的,update(Obj obj),这个表的主键是mobile,类型为varchar ,但是我们自己定义的实体类对象的类型为 Long . 由此可以判断此处发生了隐式转换,导致update语句没有使用到主键索引,扫描了全表.这张表的数据大概是 280w,可想而知,每个操作做基本遍历一次,导致大范围锁表. 当然这是前人留下的坑...,实体类的定义以及表的建立都是前人的结果~.

解决方法:

​ 这个update语句的使用场景为消费登录MQ消息,处理业务逻辑,所以在DBA发现了这个问题之后,马上下线了这个消费者(代码注释上线),暂停消费 . 找到问题后,再将这个实体类的类型替换为String,再次消费登录消息,进行业务处理,至此程序正常,没有在出现锁表异常.

扩展资料:

带着上线的问题,那我们来了解下一下问题:

1.什么是隐式转换(显示转换)?

2.replace into是个什么玩意?

3.数据库的锁?

问题1:

默认的转换规则为:

不同类型全部都转换为浮点型

如果字段是字符,条件是整型,那么会把表中的字段全部转换为整型。

问题2:

replace into 跟 insert 功能类似,不同点在于:replace into 首先尝试插入数据到表中,

  1. 如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据。

  2. 否则,直接插入新数据。

相关文章

  • Mysql隐式转换带来的生产问题

    问题场景: ​ JDK1.8 + Mysql 5.7 + RocketMq ​ 最近上线一个项目,上线之...

  • MySQL之隐式转换

    MySQL之隐式转换 inexplicit conversion 之前也总给业务优化SQL,隐式转换也非常常见,但...

  • mysql隐式转换

    mysql隐式转换 (版本 5.7) 表结构如下: 添加的几条数据 字段类型varchar, 查询条件为int和s...

  • mysql隐式转换

    隐式转化把字符串转为了double类型。 1.当字段是数值类型时,加引号或者不加引号都不影响索引的使用。 2.当字...

  • mysql隐式转换

    1.string vs number 值类型和字符串类型比较时,mysql将字符串类型转换为值类型。尽量避免类型的...

  • MySQL的隐式转换

    MySQL在什么情况下会产生隐式转换 当查询条件左右两侧类型不匹配的时候会发生隐式转换,可能导致查询无法使用索引。...

  • C++类型转换

    C++的类型转换分为隐式转换和显式转换 隐式转换举例: int i=4; double d=i;//隐式转换 显式...

  • scala-隐式机制及Akka

    隐式机制及Akka 隐式转换 隐式转换和隐式参数时Scala中两个非常强大的功能,利用隐式转换和隐式参数,可以提供...

  • Scala基础——隐式转换

    隐式转换 Scala的隐式转换,其实最核心的就是定义隐式转换函数,即implicitconversion func...

  • [js]Property names and square b

    问题缘起 自己的分析 难道做了隐式转换?(后来发现这根本不叫隐式转换) 查到解释 Property names m...

网友评论

      本文标题:Mysql隐式转换带来的生产问题

      本文链接:https://www.haomeiwen.com/subject/qtvmrktx.html