show full PROCESSLIST state看状态 time排序看时间 Info看执行具体的sql
获取了最新的死锁日志,即执行show engine innodb status
session 会话id query id 3044023120
执行sql线程 thread id 1223399
事务ID TRANSACTION 1057869923
kill 线程id
一条SQL先更新a再更新b,另一条sql先更新b再更新a!!! 导致死锁比较多的情况
死锁超时的话,sql会回滚 可能另一条sql就可以获取锁了
这种不会发生死锁 没有异步情况下 a执行完才会执行b 才会进入下一次循环!!
while{
tranction test{
update a
update b
}
}
表级锁,锁定整张表
页级锁,锁定一页
行级锁,锁定一行
共享锁,也叫S锁,在MyISAM中也叫读锁
排他锁,也叫X锁,在MyISAM中也叫写锁
悲观锁,抽象性质,其实不真实存在
乐观锁,抽象性质,其实不真实存在
互斥锁,每一次只能被一个线程所持有
自旋锁,为了让线程进行等待,让线程不断执行一个空操作的循环
间隙锁:通过 Next-Key Lock 防止幻读。
意向锁:通过 IS 和 IX 锁进行更细粒度(行级)的锁管理
Mybatis-Plus saveBatch()批量保存失效的解决
实体属性为null时,会影响生成的插入sql,进而影响批量保存逻辑
不同的属性字段为null,就会导致拆成多个insert 导致插入慢
底层doUpdate sql.equals(currentSql) 不一样 null值导致
可能在字段属性加@TableField(insertStrategy = FieldStrategy.IGNORED)
mysql 死锁问题排查
最新推荐文章于 2024-08-30 08:26:17 发布