innodb事务机制

本文介绍InnoDB存储引擎如何使用多版本并发控制(MVCC)机制来提高并发性能,并通过具体案例演示了不同场景下如何发生死锁及其解决办法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

InnoDB给MySQL提供了具有提交,回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎。

数据库实现事务隔离的方式,基本上可分为以下两种。
·一种是在读取数据前,对其加锁,阻止其他事务对数据进行修改。
·另一种是不用加任何锁,通过一定机制生成一个数据请求时间点的一致性数据快照(Snapshot),并用这个快照来提供一定级别(语句级或事务级)的一致性读取。从用户的角度来看,好象是数据库可以提供同一数据的多个版本,因此,这种技术叫做数据多版本并发控制(MultiVersion Concurrency Control,简称MVCC或MCC),也经常称为多版本数据库。

检查InnoDB_row_lock状态变量来分析系统上的行锁的争夺情况:http://book.51cto.com/art/200803/68125.htm
InnoDB的行锁模式及加锁方法:http://book.51cto.com/art/200803/68126.htm

eclipse开启两个session进行案例测试:
【场景一】
1、session1开启事务,先执行查询语句获得S锁,执行到update前设置断点,
2、session2开启事务,不设置断点,执行到update会等待锁,因为X锁与session1的S锁不兼容
3、session1执行update时会抛异常 deadlock found when trying to get lock;而此时session2获得X锁并执行完成

【场景二】
1、session1、session2同时执行完查询语句(S锁兼容),设置断点
2、session1执行update,X锁与S锁冲突,等待锁
3、session2执行完抛异常deadlock,session1获得X锁并执行完成
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值