博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多版本并发控制MVCC
阅读量:6425 次
发布时间:2019-06-23

本文共 796 字,大约阅读时间需要 2 分钟。

  • MVCC说明
MVCC只适用于repeatable read和read commit两个隔离级别
(read uncommit总是读取最新的数据行,不符合当前事务版本的数据行)
(serializable则会对所用行加锁)
MVCC是行锁的一种变种
根据不同的存储引擎,MVCC有不同的实现,典型的有
乐观并发控制和悲观并发控制
它避免了加锁操作,因此开销更低
MVCC是通过保存数据在某一时间点的快照实现的。
 
  • InnoDB的MVCC介绍
InnoDB的MVCC是通过在每行记录后面保存两个隐藏的列来实现,这两列一个是保存了行的创建 时间,一个是保存了行的过期时间(或者删除时间);
存储的不是实际的时间值,而是系统的版本号(system version number)
每开始一个新事物,系统版本号会自动递增,事物开始时间的系统版本号会作物事务的版本号,用来和查询到的每行记录版本号进行比较;
select:
innodb会根据以下两个条件检索每行记录:
a.innodb只查询行版本号早于当前事物版本的数据行(也就是说行的系统版本号小于或者等于事务的系统版本号),这样保证事务读取的行要么是事务开始前已经存在的,要么是事物自身插入或者修改的。
b.行的删除标识要么未定义,要不大于当前事务版本号,这确保事务读取到的行,在事务开始前未被删除。
 
insert:
innodb新插入的每一行保存当前系统版本号作为行版本号
update:
innodb为插入一行新记录,保存当前系统版本号作为行版本号,同时保存系统当前系统版本号到原来的行作为行删除标识
delete:
innodb为删除的每一行保存系统当前系统版本号作为行删除标识
 
MVCC不足之处是会占用额外的空间,因此每行都会保存两个列版本哈
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

转载于:https://www.cnblogs.com/use-D/p/9544997.html

你可能感兴趣的文章
armv8(aarch64)linux内核中flush_dcache_all函数详细分析【转】
查看>>
房地产英语 Real estate词汇
查看>>
python接口自动化测试(八)-unittest-生成测试报告
查看>>
第 26 章 MySQL
查看>>
C#中三种截屏方式总结
查看>>
Spring.net 学习笔记之ASP.NET底层架构
查看>>
C# System.Windows.Forms.WebBrowser中判断浏览器内核和版本
查看>>
Java 动态太极图 DynamicTaiChi (整理)
查看>>
微信公众平台后台编辑器上线图片缩放和封面图裁剪功能
查看>>
git使用教程2-更新github上代码
查看>>
张掖百公里,再次折戟
查看>>
SAP QM Batch to Batch的转移过账事务中的Vendor Batch
查看>>
本期最新 9 篇论文,帮你完美解决「读什么」的问题 | PaperDaily #19
查看>>
图解SSIS监视文件夹并自动导入数据
查看>>
Lucene.Net 2.3.1开发介绍 —— 四、搜索(一)
查看>>
MyBatis Review——开发Dao的方法
查看>>
技术研发国产化进程加快 看传感器企业如何展示十八般武艺
查看>>
技术助力第三次革命
查看>>
《HTML与CSS入门经典(第8版)》——2.6 总结
查看>>
新手指南:在 Ubuntu 和 Fedora 上安装软件包
查看>>