美文网首页
记一次生产环境mysql死锁

记一次生产环境mysql死锁

作者: 吃板栗的猫 | 来源:发表于2019-05-20 14:49 被阅读0次
mysql-binlog

这是Mysql的binlog日志,其中,third_logistics_no、order_no都应该是字符串类型,但是这里执行的时候变成了数值型;

业务逻辑是:程序在进来的时候首先会锁住该订单号的物流记录,然后执行更新语句;

然而在执行更新语句的时候,本来应该是字符串类型的参数却变成了数值型,给表列赋值与表类型不符合时,MySql底层的优化器发挥作用,会做一个强制类型转化,此时能正常操作,但会导致行锁升级为表锁;

重现场景如下:

session1:begin;

session2:begin;

session1:select * from orders where order_no = '001' for update;

session2:select * from orders where order_no = '002' for update;

session1:update orders set order_status = 1 where order_no = 001;// session2上面已经获取了002的锁,产生了锁等待,因为MySQL强制类型转换,行锁变成了表锁;

session2:update orders set order_status = 2 where order_no = 002;// 执行就报了死锁;

总结:session1等session2的锁,session2等session1的锁,同时你等我的锁,我等你的锁,然后就死锁了;
session1
session2

导致这个结果的原因是因为,sql语句的拼接中使用的是字符串拼接,写法为:s""" update orders set order_no = ${request} """ 这个写法
总结此次教训,做了两个实验,如下:


image.png

可以看出,虽然我们定义的参数都是字符串类型,但是由于我们本身的写法就是scala的字符串拼接,位于scala-lang包下的StringContext,在字符串处理的过程中,这个空串和引号直接被去掉了,得出的sql语句语法上就是错误的


image.png
正确的写法应该是用scala-sql,同样的参数,也是字符串类型,语句和参数应该是这样分开做两次封装的,传入的参数是什么类型,执行的语句中参数就是什么类型;

综上,执行的sql语句要严格按照标准规范来写,不同的东西效果肯定不一样。

相关文章

  • 记一次生产环境mysql死锁

    这是Mysql的binlog日志,其中,third_logistics_no、order_no都应该是字符串类型,...

  • MySQL如何控制用户输错密码尝试次数?

    目录 生产环境MySQL死锁如何监控及如何减少死锁发生的概率 MongoDB有哪些优秀特性及适合的场景是什么 GO...

  • mysql生产环境死锁案例1

    实例基础信息: 数据库版本:MariaDB10.0.27 隔离级别:RR(Repeatable Read) 表结构...

  • 一个Bug看InnoDB锁机制

    一个Bug引发的死锁 最近有用户反映,系统时不时会出现报错的现象。登陆生产环境查看日志,发现MySQL出现了死锁。...

  • 记一次Mysql死锁问题排查流程

    第一次在实际生产环境遇到死锁问题,从开始的懵逼状到找到并解决该问题,经历了无数次的百度。。。 项目用的MySQL数...

  • 记一次线上mysql死锁分析(二)

    记录一次比较诡异的mysql死锁日志。系统运行几个月来,就在前几天发生了一次死锁,而且就只发生了一次死锁,整个排查...

  • 记一次线上mysql死锁分析(一)

    记录一次比较诡异的mysql死锁日志。系统运行几个月来,就在前几天发生了一次死锁,而且就只发生了一次死锁,整个排查...

  • 记一次mysql死锁问题

    场景:innodb下不同的事务进行更新和插入操作导致数据库死锁,代码如下,在批量插入之前,进行了逻辑删除操作,这段...

  • 记一次mysql排错—死锁

    故事起源:ZY问我,有没有遇到过在mysql客户端执行了添加表字段的的命令,显示成功了,在客户端也看的到,为啥到服...

  • 记一次MySQL死锁排查

    一. 环境 1. 表结构 涉及到以下两张表: BIND_RECORD BIND_RECORD_HISTORY 表结...

网友评论

      本文标题:记一次生产环境mysql死锁

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