MySQL InnoDB下的死锁和锁等待超时的问题验证与梳理
来源:互联网 发布:java链表声明 编辑:程序博客网 时间:2024/06/05 05:43
MySQL数据库死锁问题
例子表user{
id 主键
name
}
//PART01
备注:共享锁之间可以并发执行,排他锁需要等待其他共享锁、排他锁释放
共享锁(简单的select语句不会加锁)
select * from user where id='5' lock in share mode;
排他锁
update user set name='111' where id='5';
//PART02
表级锁(非索引作为条件)
update user set name='222' where name='111'
行级锁(索引作为条件)
update user set name='111' where id='5'
//PART03
备注:完整的事务命令
mysql>begin;
mysql>update user set name='111' where id='5';
mysql>commit;
问题:
锁等待超时Lock wait timeout exceeded;
事务1
mysql>begin;
mysql>update user set name='111' where id='5';//事务1占着本行行级锁,一直不执行commit,不释放行级锁
mysql>
事务2
mysql>begin;
mysql>update user set name='222' where id='5';//卡住了,等待事务1 commit后释放行级锁,直到超时
死锁Deadlock found when trying to get lock;
事务1
mysql>begin;
mysql>update user set name='111' where id='5';//占有本行行级锁
mysql>update user set name='222' where name='111';//卡住了,占有表级锁时候,需要等待事务2释放行级锁,进入 A等待B,B又等待A的死锁(此时mysql的内部机制会重启事务2,解决死锁问题,保证事务1可以正常进行)
事务2
mysql>begin;
mysql>update user set name='333' where id='5';//卡住了,排队等待事务1释放本行行级锁(验证过,多个事务是有等待顺序的)
阅读全文
0 0
- MySQL InnoDB下的死锁和锁等待超时的问题验证与梳理
- RDS MySQL InnoDB 锁等待和锁等待超时的处理
- mysql的innodb死锁问题
- 数据库偶然出现死锁(等待锁超时)的情况处理:
- mysql:innodb锁与死锁
- 解决最近遇到的高并发下,mysql innodb引擎的死锁问题
- Mysql Innodb数据库锁等待超时故障排查实践
- MYSQL INNODB中GAP LOCK引起死锁的问题
- oracle 死锁和锁等待的区别
- oracle 死锁和锁等待的区别
- 线上问题引发的思考---从一个死锁看mysql innodb的锁机制
- Python捕捉MySQL的警告导致的事物锁等待超时问题
- mysql InnoDB锁等待
- mysql InnoDB锁等待的查看及分析
- mysql InnoDB锁等待的查看及分析
- Mysql锁的问题(InnoDB)
- 从一个死锁看mysql innodb的锁机制
- Mysql-innodb中死锁检测的代码
- MySQL函数的作用域
- 认知工程产生的原因及意义
- Scala环境搭建
- 在设计流程中,通过这6种方式来运用信息架构
- Masonry介绍与使用实践(快速上手Autolayout)
- MySQL InnoDB下的死锁和锁等待超时的问题验证与梳理
- AIDL详解之AIDL基础
- Scala函数和代码块
- 撤销git commit 的 git reset
- 角点检测算法
- Scala的基础if和for
- spring事务配置 :基于AspectJ的XML方式
- Thymeleaf前后端传值 页面取值与js取值
- Spring Boot整合模板引擎