| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> mysql mvcc是怎样实现隔离级别的 -> 正文阅读 |
|
[大数据]mysql mvcc是怎样实现隔离级别的 |
InnoDB的MVCC实现逻辑InnoDB的MVCC是通过在每行记录后面保存两个隐藏的列来实现的。一个保存了行的事务ID(DB_TRX_ID),一个保存了行的回滚指针(DB_ROLL_PT)。每开始一个新的事务,都会自动递增产 生一个新的事务id。事务开始时刻的会把事务id放到当前事务影响的行事务id中,当查询时需要用当前事务id和每行记录的事务id进行比较。
MVCC 在mysql 中的实现依赖的是 undo log 与 read view 。 undo log 根据行为的不同,undo log分为两种:insert undo log?和?update undo log
insert 操作中产生的undo log,因为insert操作记录只对当前事务本身课件,对于其他事务此记录不可见,所以 insert undo log 可以在事务提交后直接删除而不需要进行purge操作。
数据库 Insert时的数据初始状态:
当另一个事务第二次修改当前数据: 为了保证事务并发操作时,在写各自的undo log时不产生冲突,InnoDB采用回滚段的方式来维护undo log的并发写入和持久化。回滚段实际上是一种 Undo 文件组织方式。 ReadView 对于?RU(READ UNCOMMITTED)?隔离级别下,所有事务直接读取数据库的最新值即可,和?SERIALIZABLE?隔离级别,所有请求都会加锁,同步执行。所以这对这两种情况下是不需要使用到?Read View?的版本控制。 对于?RC(READ COMMITTED)?和?RR(REPEATABLE READ)?隔离级别的实现就是通过上面的版本控制来完成。两种隔离界别下的核心处理逻辑就是判断所有版本中哪个版本是当前事务可见的处理。针对这个问题InnoDB在设计上增加了ReadView的设计,ReadView中主要包含当前系统中还有哪些活跃的读写事务,把它们的事务id放到一个列表中,我们把这个列表命名为为m_ids。 对于查询时的版本链数据是否看见的判断逻辑:
READ COMMITTED 隔离级别下的ReadView 每次读取数据前都生成一个ReadView (m_ids列表),使用READ COMMITTED隔离级别的事务在每次查询开始时都会生成一个独立的 ReadView。 REPEATABLE READ 隔离级别下的ReadView 在事务开始后第一次读取数据时生成一个ReadView(m_ids列表)。 MVCC总结:所谓的MVCC(Multi-Version Concurrency Control ,多版本并发控制)指的就是在使用?READ COMMITTD、REPEATABLE READ?这两种隔离级别的事务在执行普通的 SEELCT 操作时访问记录的版本链的过程,这样子可以使不同事务的? 在 MySQL 中, READ COMMITTED 和 REPEATABLE READ 隔离级别的的一个非常大的区别就是它们生成 ReadView 的时机不同。在 READ COMMITTED 中每次查询都会生成一个实时的 ReadView,做到保证每次提交后的数据是处于当前的可见状态。而 REPEATABLE READ 中,在当前事务第一次查询时生成当前的 ReadView,并且当前的 ReadView 会一直沿用到当前事务提交,以此来保证可重复读(REPEATABLE READ)。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 6:47:02- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |