当前位置:网站首页>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生成之前就已经提交了,修改的结果,当前事务是能看见的。
边栏推荐
- G.登山小分队(暴力&dfs)
- 数据链路层-------以太网协议
- using关键字学习
- 杭电校赛(ACM组队安排)
- Crawler - basic use of selenium, no interface browser, other uses of selenium, cookies of selenium, crawler cases
- RS|哨兵二号(.SAFE格式)转tif格式
- 郑轻新生校赛和中工选拔赛题解
- 基于数据库实现分布式锁
- 【Today in History】August 4: First female Turing Award winner; NVIDIA acquires MediaQ; first Cybersecurity Challenge completed
- 16、学习MySQL 正则表达式
猜你喜欢
属于程序猿的浪漫
关于pnpm包管理器的版本问题
微软表示将向内部网络安全专家共享数据 为企业提供更安全保护
基于数据库实现分布式锁
1403. 非递增顺序的最小子序列
实际工作中的高级技术(训练加速、推理加速、深度学习自适应、对抗神经网络)
【HMS core】【Media】【视频编辑服务】 在线素材无法展示,一直Loading状态或是网络异常
并发程序的隐藏杀手——假共享(False Sharing)
JCMsuite Application: Oblique Plane Wave Propagation Transmission Through Aperture
程序猿七夕礼物-如何30分钟给女朋友快速搭建专属语聊房
随机推荐
本周讨论用户体验:Daedalus 的 Nemo 加入 Ambire,探索加密海洋
leetcode: 241. Designing precedence for arithmetic expressions
C# TextBlock 上标
第十六章 源代码文件 REST API 教程(一)
直播系统开发——直播间架构的设计及难点分析
leetcode: 255 Verify preorder traversal sequence binary search tree
谷歌插件.crx文件下载后被自动删除的解决方法
FRED Application: Capillary Electrophoresis System
Leetcode: 215 disorderly to find the first big k element in the array
编译型与解释型编程语言的区别
RS|哨兵二号(.SAFE格式)转tif格式
Find My Technology | Prevent your pet from getting lost, Apple Find My technology can help you
vim common operation commands
F.金玉其外矩阵(构造)
Makefile 语法及使用笔记
OAID是什么
This week to discuss the user experience: Daedalus Nemo to join Ambire, explore the encryption of the ocean
四平方和,激光炸弹
[in-depth study of 4 g / 5 g / 6 g project - 50] : URLLC - 16 - the 3 GPP URLLC agreement, specification, technical principle of depth interpretation - 10 - high reliability technology - 1 - low codin
[深入研究4G/5G/6G专题-50]: URLLC-16-《3GPP URLLC相关协议、规范、技术原理深度解读》-10-高可靠性技术-1-低编码率编码调制方案MCS与高可靠性DRB