MySql数据库死锁deadlock
来源:互联网 发布:淘宝达人如何发布清单 编辑:程序博客网 时间:2024/04/27 17:16
今天在项目性能测试中遇到个Mysql的DeadLock的问题。
后来根据数据库日子查找原因,大概模拟一下发生的情形。
数据库用的innoDB。
InnoDB行锁是通过给索引上的索引项加锁来实现的,InnoDB这种行锁实现特点意味着:只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁!
下面例子中id是主键,操作都走索引,锁都是row lock。
table中数据
用2个线程做如下操作,将发生死锁现象,且1个线程执行成功,另一个线程失败。
最终结果:第一条数据被改变,第3条数据不变。
MySql的InnoDB,\加了事务的select语句索引的记录,会加S锁, insert,delete,update会加X锁。
设定左边为线程1,右边为线程2
线程1在id=1的一行记录上加了S锁, 当线程2要update操作这行记录时,要在记录上加X锁, 此时需要等待线程1释放id=1记录上的S锁。
线程2在id=3的一行记录上加了S锁, 当线程1要update操作这行记录时,要在记录上加X锁, 此时需要等待线程2释放id=3记录上的S锁。
彼此互相等待,然后就死锁了。
Mysql释放死锁的机制,看锁定的记录数,一般会允许锁定记录多的事务执行通过, 而锁定记录少的事物回滚。范围同等时应该是按X锁请求的先后了。
补充说明: InnoDB 如果where后面的条件字段没有索引,则加锁时是会锁表。走索引只会锁查询或操作的记录。InnoDB事务中的查询条件需要小心了
互斥
S
X
S
否
是
X
是
是
先写这么多。
- MySql数据库死锁deadlock
- 死锁(deadlock)
- Deadlock --- 死锁
- 死锁deadlock
- mysql数据库死锁:Deadlock found when trying to get lock; try restarting transaction
- iis应用程序中报数据库死锁"deadlock"的问题
- 死锁问题(Deadlock)
- deadlock linux死锁
- 死锁(deadlock)例题解析
- MySql deadlock
- mysql数据库死锁
- Linux内核死锁(deadlock)检测
- Multi-Programming-11 DeadLock 死锁
- [数据库]mysql死锁问题分析
- MySQL数据库死锁的解决办法
- mysql innodb hibernate Deadlock
- 死锁(deadlock)、活锁(livelock)与饿死(starvation)
- Win32多线程之死锁(DeadLock)
- Hadoop内置作业调度器与调度平台的集成
- 《AS3 Expert》_15 Flash Player的垃圾内存回收机制:能否强制回收?
- 批量删除 Oracle当前用户的数据表。
- c语言打印字符乱码和char *字符循环赋值时“段错误 (核心已转储)”问题解决
- mk中的android:sharedUserId和LOCAL_CERTIFICATE作用
- MySql数据库死锁deadlock
- 我们的资源和优势是什么——凡事都要争取一下
- linux执行sh文件
- laptop linux重装 指南
- 《疯狂的程序员》一
- 距离变换(cvDistTransform)
- 软件用例设计中的结构设计
- 二叉查找树的遍历总结
- c/c++输入输出总结