当前位置:网站首页>MVCC实现过程
MVCC实现过程
2022-08-04 14:50:00 【棒棒吃不胖】
什么是MVCC
MVCC,多版本并发控制。
通过保存数据的历史版本,根据比较数据的版本号来决定数据的是否显示,在不需要加读锁的情况就能达到事务的隔离效果,最终可以在读取数据的时候可以同时进行修改,修改数据时候可以同时读取,极大的提升了事务的并发性能。
部分名词解释
名词 | 解释 |
---|---|
事务版本号 | 一个事务开启后都会获得一个自增长的事务的ID,由此判断先后顺序 |
trx_id | 记录操作该数据事务的事务ID |
roll_pointer | 相当于一个指针,指向回滚段的undo日志 |
row_id | 单调递增的行ID,不是必需的,占用6个字节 |
undo log | 回滚日志,用于记录数据被修改前的信息 |
版本链 | 多个事务并行操作某一行数据时,不同事务对该行数据的修改会产生多个版本,然后通过回滚指针,连成一个链表 |
快照读 | 读取的是记录数据的可见(有旧版本)版本(不加锁) |
当前读 | 读取的是记录数据的最新版本(显式加锁) |
Read View | 执行SQL语句时产生的读视图,判断当前事务可见哪个版本的数据 |
m_ids | 当前系统活跃未提交的所有事务ID(列表) |
up_limit_id | 生成Read View时,当前系统中活跃的读写事务中最小的事务id |
low_limit_id | 生成Read View时,系统中应该分配给下一个事务的id值 |
creator_trx_id | 创建当前Read View的事务ID |
MVCC实现流程
说明一下Read View的匹配规则。
1)如果数据事务ID trx_id < up_limit_id,表明生成该版本的事务在生成Read View前,已经提交(因为事务ID是递增的),所以该版本可以被当前事务访问。
2)如果trx_id >= low_limit_id,表明生成该版本的事务在生成ReadView后才生成,所以该版本不可以被当前事务访问。
3)如果 up_limit_id <= trx_id < low_limit_id,需要分3种情况讨论
(1)如果m_ids包含trx_id,则代表Read View生成时刻,这个事务还未提交,但是如果数据的trx_id等于creator_trx_id的话,表明数据是自己生成的,因此是可见的。
(2)如果m_ids包含trx_id,并且trx_id不等于creator_trx_id,则Read View生成时,事务未提交,并且不是自己生产的,所以当前事务也是看不见的;
(3)如果m_ids不包含trx_id,则说明你这个事务在Read View生成之前就已经提交了,修改的结果,当前事务是能看见的。
边栏推荐
- Almost all known protein structures in the world are open sourced by DeepMind
- CloudCompare&PCL 点云按网格划分(点云分幅)
- C# 判断文件编码
- 化繁为简,聊一聊复制状态机系统架构抽象
- leetcode: 255 Verify preorder traversal sequence binary search tree
- C# SolidWorks二次开发---工程图简单版标注孔信息
- Go 语言快速入门指南: 变量和常量
- 四平方和,激光炸弹
- leetcode: 251. Expanding 2D Vectors
- Sum of four squares, laser bombs
猜你喜欢
程序猿七夕礼物-如何30分钟给女朋友快速搭建专属语聊房
【剑指offer59】队列的最大值
用了TCP协议,就一定不会丢包吗?
Crawler - basic use of selenium, no interface browser, other uses of selenium, cookies of selenium, crawler cases
快解析结合千方百剂
技术分享| 小程序实现音视频通话
leetcode: 259. Smaller sum of three numbers
Hangzhou Electric School Competition (Counter Attack Index)
leetcode: 250. Count subtrees of equal value
一看就会的Chromedriver(谷歌浏览器驱动)安装教程
随机推荐
C# 将dll打包到程序中
实际工作中的高级技术(训练加速、推理加速、深度学习自适应、对抗神经网络)
using关键字学习
leetcode: 212. Word Search II
Qt的QItemDelegate使用
兆骑科创创新创业大赛活动举办,线上直播路演,投融资对接
Next -21- 添加相册系列 - 1- 框架设置
LeetCode_模拟_中等_498.对角线遍历
MySQL优化学习笔记
手搓一个“七夕限定”,用3D Engine 5分钟实现烟花绽放效果
【Web技术】1401- 图解 Canvas 入门
苏秋贵:揭秘绿联科技用5年时间从0做到6亿,如何一枝独秀?
Resharper 如何把类里的类移动到其他文件
leetcode:241. 为运算表达式设计优先级
输入输出流总结
世间几乎所有已知蛋白质结构,都被DeepMind开源了
How to automatically renew the token after it expires?
token 过期后,如何自动续期?
Lixia Action | Kyushu Yunzhang Jinnan: Open source is not a movement for a few people, popularization is the source
F.金玉其外矩阵(构造)