MVCC 总结
来源:互联网 发布:大数据开发和数据挖掘 编辑:程序博客网 时间:2024/05/01 15:55
MVCC只能在可重复读和可提交读的隔离级别下生效。不可提交读不能使用它的原因是不能读取符合事物版本的行版本。它们总是读取最新的行版本。可序列化不能使用MVCC的原因是,它总是要锁定行。
select:
满足以下两个条件innodb会返回该行数据:
(1)该行的创建版本号小于等于当前版本号,用于保证在select操作之前所有的操作已经执行落地。
(2)该行的删除版本号大于当前版本或者为空。删除版本号大于当前版本意味着有一个并发事务将该行删除了。
insert:
将新插入的行的创建版本号设置为当前系统的版本号。
delete:
将要删除的行的删除版本号设置为当前系统的版本号。
update:
不执行原地update,而是转换成insert + delete。将旧行的删除版本号设置为当前版本号,并将新行insert同时设置创建版本号为当前版本号。
其中,写操作(insert、delete和update)执行时,需要将系统版本号递增。
InnoDB默认的隔离级别是RR(可重复读),可以解决脏读和不可重复读,但是不能解决幻读问题。
什么是幻读?
事务A读取了一个范围内的数据,此时事务B在该范围内插入了一条数据,并立马提交了事务,此时事务A再次读取这个范围的数据时,发现多了一条,就好像幻觉一样。
MVCC只能在可重复读和可提交读的隔离级别下生效
MySQL InnoDB支持三种行锁定方式:
l 行锁(Record Lock):锁直接加在索引记录上面,锁住的是key。
l 间隙锁(Gap Lock):锁定索引记录间隙,确保索引记录的间隙不变。间隙锁是针对事务隔离级别为可重复读或以上级别而已的。
l Next-Key Lock :行锁和间隙锁组合起来就叫Next-Key Lock。
默认情况下,InnoDB工作在可重复读隔离级别下,并且会以Next-Key Lock的方式对数据行进行加锁,这样可以有效防止幻读的发生。Next-Key Lock是行锁和间隙锁的组合,当InnoDB扫描索引记录的时候,会首先对索引记录加上行锁(Record Lock),再对索引记录两边的间隙加上间隙锁(Gap Lock)。加上间隙锁之后,其他事务就不能在这个间隙修改或者插入记录。
Gap Lock在InnoDB的唯一作用就是防止其他事务的插入操作,以此防止幻读的发生。
阅读全文
0 0
- MVCC 总结
- MVCC
- MVCC
- MVCC
- mvcc
- mvcc
- MVCC
- mvcc
- MVCC
- MVCC浅析
- MVCC 问答
- [Mysql]MVCC
- InnoDB MVCC
- MVCC基本原理
- MVCC浅析
- MVCC浅析
- 闲话MVCC
- mvcc机制
- segment space management automatic and manual
- Algorithm之路九:Palindrome Number
- maven 自动编译版本号 buildnumber-maven-plugin 1.4
- Lifecycle+Retrofit+Room完美结合 领略架构之美
- RabbitMQ (四) 路由选择 (Routing)
- MVCC 总结
- 认识Spring
- 使用nvm安装各个版本node
- 纯前端利用 js-xlsx 实现 Excel 文件导入导出功能示例
- 亿级流量电商详情页系统的大型高并发与高可用缓存架构
- -安
- Eclipse中文字体太小-解决方法
- JAVA EE 2011年韩顺平经典讲课
- 二叉搜索树