当前位置: 首页 > news >正文

数据库中的MVCC--多版本并发控制

一、前言

1、定义:MVCC(Multi-Version Concurrency Control),多版本并发控制,主要为了提高数据库

的并发性能。是MySQL的InnoDB存储引擎实现隔离级别的一种具体方式。用于实现提交读和可重

复读这两种隔离级别。

2、MVCC用更好的方式去处理读写请求,做到在发生读写请求冲突时不用加锁。

3、MVCC中的读指的是快照读,而不是当前读,当前读是一种加锁操作,是悲观锁。

4、当前读:读取的数据库记录都是当前最新版本的

select lock in share mode(共享锁)
select for update(排他锁)
update(排他锁)
insert(排他锁)
delete(排他锁)

5、快照读:读取的数据库记录不一定是当前最新版本的,有可能是之前版本的。

二、MVCC实现原理

主要依赖于记录中的三个隐藏字段,undolog,read view来实现的。

1、undo log:回滚日志,存储进行insert,delete,update操作的时候产生的方便回滚的日志。

2、版本链:历史版本由回滚指针连接起来组成的一个链表,链尾是最旧的历史版本,链首是最新

的版本。

3、readview:确定在版本链中选择哪一条记录。所谓ReadView,是指事务(记做事务A)在某一

时刻给整个事务系统(trx_sys)打快照,之后再进行读操作时,会将读取到的数据中的事务id与

trx_sys快照比较,从而判断数据对该ReadView是否可见,即对事务A是否可见。

4、RC(读已提交)和RR(可重复读)级别下的innoDB快照读有什么不同?

因为Readview生成的时机不同,从而造成RC、RR级别下快照读的结果的不同。

(1)在RC隔离级别下,是每个快照读都会产生并获取最新的read view,所以在RC级别下的事务

中可以看到别的事务提交的更新。

(2)在RR隔离级别下,则是同一个事务中的第一个快照才会创建readview,之后的快照读获取

的都是同一个readview,所以对之后的修改不可见。

http://www.lryc.cn/news/272712.html

相关文章:

  • wps将姓名处理格式为:姓**
  • 2023年我的编程之旅:技术演进与自我成长的纪录
  • 好用免费的WAF---如何安装雷池社区版
  • 看似 bug 又非 bug 的一个 bug
  • mysql常见问题
  • QT上位机开发(串口界面设计)
  • k8s之pod
  • 第二百四十三回 再分享一个Json工具
  • electron自定义菜单
  • 变量和函数提升(js的问题)
  • Excel 插件:ASAP Utilities Crack
  • hyperf 十九 数据库 二 模型
  • 使用python快速开发与PDF文档对话的Gemini聊天机器人
  • Spring Cloud Gateway集成Knife4j
  • Hive10_窗口函数
  • ipvsadm命令详解
  • zabbix通过自动发现-配置监控项、触发器(小白教程)
  • Dockerfile文件介绍
  • 【PHP】函数array_reduce()使用场景
  • 软件测试基础理论学习-软件测试方法论
  • Unity 关于点击不同物品移动并触发不同事件
  • c++IO库详细介绍
  • 海外静态IP和动态IP有什么区别?推荐哪种?
  • OpenHarmony从入门到放弃(一)
  • Unity3D UGUI图集打包与动态使用(TexturePacker)
  • java maven项目添加oracle jdbc的依赖
  • 【UEFI基础】EDK网络框架(环境配置)
  • K8S学习指南(60)-K8S源代码走读之API-Server
  • 基于深度学习的交通标志图像分类识别系统
  • 使用uni-app editor富文本组件设置富文本内容及解决@Ready先于onload执行,无法获取后端接口数据的问题