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

了解MVCC

概念

MVCC,全称Multi-Version Concurrency Control,即多版本并发控制,是一种并发控制的方法,维护一个数据的多个版本,使得读写操作没有冲突,快照读为MySQL实现MVCC提供了一个非阻塞读功能。MVCC的具体实现还要依赖数据库记录中的三个隐式字段,undo log,readView。

当前读

读取的是记录的最新版本,读取时还要保证其他并发事务不能修改当前记录,会对读取的记录进行加锁。对于我们日常的操作,如:select...lock in share mode(共享锁),select... for update、update、insert、delete(排他锁)都是一种当前读。

快照读

简单的select(不加锁)就是快照读,快照读,读取的是记录数据的可见版本,有可能是历史数据,不加锁,是非阻塞读。
  Read Committed:每次select,都生成一个快照读。
  Repeatable Read:开启事务后第一个select语句才是快照读的地方。
  Serializable:快照读会退化为当前读。

ibd2sdi  ibd文件名  这条指令可以查看对应ibd文件中的信息。

undo log版本链

在执行修改操作前undo log会记录修改前的操作

执行修改后DB_TRX-ID和DB_ROLL_PTR都会进行相应的更新DB_TRX-ID更新为当前事务id DB_ROLL_PTR指向上一条记录在undo log中的存放地址

 readview

min_ids 当前还未提交的事务id集合

min_trx_id 最小活跃事务id

max_trx_id 预分配事务id 当前最大事务id+1 因为事务id是自增的

creater_trx_id ReadView创建时的事务id

trx_id代表当前修改记录的事务id

 当前隔离级别为RC

每执行一次快照读都会生成ReadView

这次读取的记录应该是DB_TRX-ID = 2 的数据

 这次读取的记录应该是DB_TRX-ID = 3 的数据

  当前隔离级别为RR

仅在事务第一次执行快照时生成ReadView后续复用

总结 

redo log保证了事务的持久性

undo log保证了事务的原子性

redo log+undo log保证了事务的一致性

MVCC+锁保证了事务的隔离性

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 从零安装pytorch并在pycharm中使用
  • 全面对比与选择指南:pgvector与Milvus向量数据库
  • Unity3D 物体圆周运动
  • 利用HttpServlet完成MySql数据库my_user表的登录校验
  • 算法学习day29
  • AWS生成式AI项目的全生命周期管理
  • Qt pro文件详解
  • 掌握Dism++,让你的Windows系统更加清爽、流畅!
  • MyIP:强大且简单好用!
  • Langchain-Chatchat+Xinference集成部署
  • 【线性代数】汤家凤线性代数辅导讲义整理
  • Java中基本数据类型包装类的常量池缓存的值得范围是多少?
  • Linux:账号和权限管理(二)
  • 掀起 .NET 风暴:用 Docker 快速打造并部署你的炫酷应用!
  • the request was rejected because no multipart boundary was found
  • Android组件 - 收藏集 - 掘金
  • Java|序列化异常StreamCorruptedException的解决方法
  • Java程序员幽默爆笑锦集
  • JDK 6和JDK 7中的substring()方法
  • JS题目及答案整理
  • mysql 5.6 原生Online DDL解析
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • 基于axios的vue插件,让http请求更简单
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 聊一聊前端的监控
  • 面试总结JavaScript篇
  • 判断客户端类型,Android,iOS,PC
  • 什么是Javascript函数节流?
  • ​Python 3 新特性:类型注解
  • # .NET Framework中使用命名管道进行进程间通信
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (k8s)Kubernetes本地存储接入
  • (leetcode学习)236. 二叉树的最近公共祖先
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (原創) 未来三学期想要修的课 (日記)
  • (转)C#调用WebService 基础
  • ******之网络***——物理***
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .net core + vue 搭建前后端分离的框架
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .NET Core中的时区转换问题
  • .NET 设计一套高性能的弱事件机制
  • .net 重复调用webservice_Java RMI 远程调用详解,优劣势说明
  • .NET/C# 使窗口永不获得焦点
  • .Net程序帮助文档制作
  • .net和jar包windows服务部署
  • .NET开源项目介绍及资源推荐:数据持久层 (微软MVP写作)
  • .net实现客户区延伸至至非客户区
  • /dev/VolGroup00/LogVol00:unexpected inconsistency;run fsck manually
  • @angular/cli项目构建--http(2)
  • [.net] 如何在mail的加入正文显示图片
  • [.NET]桃源网络硬盘 v7.4
  • [1]从概念到实践:电商智能助手在AI Agent技术驱动下的落地实战案例深度剖析(AI Agent技术打造个性化、智能化的用户助手)