栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Mysql的MVCC

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Mysql的MVCC

MVCC 1.什么是MVCC?

多版本并发控制,通过数据行的多个版本来实现数据库的并发控制。为了查询一些正在被其他事务更新的行被更新之前的数据值。这样查询就不用等其他事务释放锁。

2.快照读和当前读

2.1 快照读:

不加锁的非阻塞读,读的是快照的内容(比如不加锁的select操作)快照读式基于MVCC,避免了锁操作快照读基于MVCC,有多个版本,读取的可能不是最新的版本隔离级别不能式串行,否则会退化成当前读

2.2 当前读:

阻塞式的读,读的是记录的最新版本当前读要保证其他事务不能修改当前记录会对当前记录加锁

2.3 mysql里的可重复读其实已经解决了幻读

3.MVCC的实现:

依赖于:隐藏字段、Undo Log 、readView

1、 隐藏字段 :

rowId

Innodb采用主键索引(聚簇索引),会利用主键维护索引,若表没有主键,就用第一个非空唯一索引,若没有唯一索引,则用row_id这个隐藏字段作为主键索引。

事务id(trx_id):

每次事务对记录进行修改,都会把当前事务id赋值给 trx_id(修改操作trx_id每次递增,读操作trx_id为0)

回滚指针(roll_pointer)

undo log会记录老版本的记录,然后回滚指针执行老版本的位置

2、Undo Log版本链

3.MVCC实现原理
readview

readview规则:


整体操作流程

read committed 隔离级别的时候,每一次select 都会重新获取一个read view

repeatable read 隔离级别下,只在第一次读的时候获取一次read view

readview主要解决版本链中哪些版本是对当前事务可见的。

readview主要针对read committed和repeatable read(他们有历史版本,其他两个都是读最新版本)

总结:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/709904.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号