mysql是如何实现mvcc的
2024-09-08 13:06:34
mvcc的概念
mvcc即多版本并发控制,是一种并发控制的策略,能让数据库在高并发下做到安全高效的读写,提升数据库的并发性能;
是一种用来解决并发下读写冲突的无锁解决方案,为事务分配单向增长时间戳,为每次修改保存一个版本,版本号与时间戳关联;
可解决的问题
1、在并发读写数据库时,可以做到在读操作时不用阻塞写操作,写操作也不用阻塞读操作,提高了数据库并发读写的性能
2、解决脏读、幻读、不可重复读等事务隔离问题,但是不能解决更新丢失问题
前置概念
当前读
读取数据的最新版本,读取时需保证其他并发事务不能修改当前记录,会对读取的记录加锁;如insert,update,delete,for update等语句会走当前读
快照读
读的可能并不是最新数据,可能是历史数据;要求事务隔离级别不能是串行,串行级别下快照读会转为当前读;
mvcc实现的三大要素
图示:
隐式字段
数据库的每行记录除了记录显示的数据外,还会有一些隐藏字段,mvcc用到了其中三个,如下:
1.DBTRXID 最后修改该条记录的事务id,
2.DBROLLPTR 回滚指针,用于定位undolog中的历史记录,指向该记录的上一版本
3.DBROWJD 隐藏的主键
undoLog
即回滚日志,用于记录每条记录历史版本数据的日志文件,当update,insert,delete等语句执行时记录历史版本数据,方便出错时回滚
readview
定义
readview是事务进行快照读操作的时候生产的读视图,在该事务执行快照读的那一刻,会生成一个数据系统当前的快照,记录并维护系统当前活跃事务的id,事务的id值是递增的;可用来作可见性判断,当事务对某一记录执行快照读的时候会产生一个readview视图,可把它当做一个条件去判断当前事务能读到该数据的哪个版本,有可能读的是当前最新数据,也有可能读的是undolog中的历史数据
可见性判断规则
可见性判断的前提需要理解三个字段的概念:
trx_list:维护Read View生成时刻系统正活跃的事务ID
up_limit_id:记录trx_list列表中事务ID最小的ID
low_limit_id:Read View生成时刻系统尚未分配的下一个事务ID
比较可见性:
将记录的隐式字段DBTRXID拿出来与up_limit_id比较,如果小于表示DBTRXID在up_limit_id之前就生成了,属于历史数据,则对当前事务可见;
如果大于则继续判断DBTRXID>=low_limit_id,如果大于等于则表示DBTRXID是生成readview过后才产生的,则该记录不可见;
如果DBTRXID<low_limit_id则需判断DBTRXID在不在当前活跃的事务列表trx_list中,如果在列表中则不可见,否则表示该事务再生成readView前就已提交,则对当前事务可见,具体见图:
最新文章
- php 一些经常用到的方法
- 【bzoj1503】 NOI2004—郁闷的出纳员
- Centos系统下Lamp环境的快速搭建(超详细,转)
- 手把手教你开发chrome扩展一:开发Chrome Extenstion其实很简单
- 安装mysql(zip格式安装包)
- android获取手机的所有通讯录的号码和sim卡号码
- shell写的计算器
- 【读书笔记】管道和FIFO
- MySQL实用基础笔记
- angulajs 当input使用 bootstrap的email类型时,如果是无效的email格式,则ng-model无效的情况
- 解决编译时出现的警告:format string is not a string literal (potentially insecure)
- JavaScript(第一天)【<;script>;标签浅析】
- Python学习笔记1环境搭建
- devexpress vs2015 安装亲测
- cmd/git设置alias提高效率
- javaweb笔记三
- luogu4595 [COCI2011-2012#5] POPLOCAVANJE 后缀自动机
- VS code配置docker的shell环境
- 『C++』Temp_2018_12_13_Type
- linux ccenteros 部署 redis
热门文章
- ThreadLocal for Golang
- 洛谷P4135 作诗(不一样的分块)
- ARC125E - Snack (网络流)
- 【java】学习路径25-ArrayList类,Vector类,LinkedList类的使用和区别,Iterator迭代器的使用
- KingbaseES时间函数的比较
- KingbaseES R6 集群备库网卡down测试案例
- 小结event.target与this
- Python数据科学手册-机器学习: 主成分分析
- 云原生之旅 - 3)Terraform - Create and Maintain Infrastructure as Code
- 我眼中的大数据(二)——HDFS