| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> MVCC概念 -> 正文阅读 |
|
[大数据]MVCC概念 |
一、MVCC解决了什么问题?主要解决的是多个事务并发引起的问题。 原本道理上来说读写和写读是不能并发的。但是如果不能并发的话,数据库的效率就会非常低,所以才会引入MVCC。 本文结合以下链接及自己的验证猜测得出的结论。并没有看过源码。 https://blog.csdn.net/LO_YUN/article/details/111319170 https://www.cnblogs.com/itZhy/p/8831947.html 请先理解readview和undolog版本链。 此外每次生成readview都会携带这几个字段:
每条数据都有两条重要的隐藏字段:一个是trx_id,代表最近最近一次更新这条数据的事务id,另一个字段是roll_pointer,这个字段指向了这个实际undo log的回滚日志。 我认为m_ids,min_trx_id,max_trx_id应该是指针类型的,指向同一条trx_id的这三个字段指向同一个地址(个人猜想,觉得这样才解释得通,如有时间,会好好找下相关文档求证,现在假设是这样的) readview的生成时机事务的隔离级别有四个:
读未提交和串行化使用很少。所以不做讨论(主要是它们也不需要readview) 在开启事务的时候第一条sql语句就会生成readview。 在读已提交的情况下,readivew生成的时机是,其它未提交的事务提交了。就会重新生成readview。 在可重复读的情况下,readivew生成的时机是,自己需要写行锁。就会重新生成readview。 场景下面只讨论可重复读的情况: 我们假设以下场景: 假设有张表:字段只有id,sum。id是主键。有条记录是(1,0) ?? ?此时我们开启三个事务,操作如下。 ?我们假设当前的txid是100,事务A的txid是101,事务B的txid是102.事务C的txid是103 初始状态: ?执行①后:select * from test where id=1,找到的tx_id=101,sum=0 执行②后:update test set sum=sum + 10 where id = 1 ?执行③后:select * from test where id=1,找到的tx_id=101,sum=0 ??执行④后:select * from test where id=1,找到的tx_id=102,sum=10 ? 执行⑤后: commit。 ?执行⑥后:select * from test where id=1,找到txid=101,sum=0 ? ?执行⑦后:update test set sum=sum + 10 where id = 1。会重新生成readview。 执行⑧后:select * from test where id=1?,找到的txid=103.sum=10 ? ? ?执行⑨后:update test set sum=sum + 10 where id = 1,会一直阻塞获取行锁。 ? 执行⑩后:commit。事务C的update就会更新readview。 ? 执行?后:select * from test where id=1?,找到txid=103,sum=30 ? ? 这就是就是我理解的MVCC。其实就感觉像是每个事务存了一份快照,只是触发更新的快照的时间不一样。 如有错误望指正!!! 感谢 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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/23 20:07:18- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |