一、MVCC

(1)mvcc主要undo日志版本链和read-view一致性视图来保证多事务的并发控制,mvcc是innodb的一种特殊机制,他保证了事务四大特性之一的隔离性(原子性,一致性,隔离性)。

(2)不同事务的隔离级别mvcc的作用机制不一样,当隔离级别是读已提交的时候,他会第一次执行select语句的时候会生成一个read-view,基于undo日志版本链的一致性试图,之后整个事务每当有select执行的时候就会去更新read-view,当事务的隔离级别是可重复读的时候,mvcc机制只会在第一次执行select语句的时候去生成read-view的一致性试图。

基于undo日志版本链的比对规则

(1)第一次执行select的时候,innodb引擎会根据目前在执行的事务生成有效的事务id的数组,和一个最大事务的id。形成最小事务minId 和 maxId。
 
(2)当一个事务执行select语句的时候,会去基于一下原则比对拿到基于当前事务隔离级别的数,从版本链的最上面开始比对:
  a、读取的当前版本链事务ID>read-view的maxId,不可见的
  b、读取当前版本链事务ID>read-view的minId并且小于maxId,如果当前版本链的事务ID在read-view中,那么说明生成read-view的时候当前版本链的事务正在执行,所以是不可见的。如果当前版本链的事务ID不在read-view中,说明该事务已提交,数据是可见的。
  c、读取的当前版本链的事务ID小于minId的话,说明生成read-view的时候,该事务已经提交了,数据是可见的。
 
  注意:mvcc在控制事务隔离级别是读已提交还是可重复读的时候,区别在于mvcc机制在读已提交的事务级别时候是每次执行select查询的时候会重新生成read-view,而可重复读是在事务第一次执行select语句的时候生成一次read-view,贯穿整个事务的执行。
 
 
 
 
 二、Innodb中的BufferPool缓存机制
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

mysql中innodb引擎的mvcc机制和BufferPool缓存机制的更多相关文章

  1. MySQL中innodb引擎分析(初始化)

    MySQL的存储引擎是以插件形式工作的,这应该是MySQL的一大特色了吧! 依据<深入理解MySQL>的内容,5.1版本号时存储引擎的插件化都还不是彻底,确切的说是刚加入的特性.为MySQ ...

  2. MySql中innodb存储引擎事务日志详解

    分析下MySql中innodb存储引擎是如何通过日志来实现事务的? Mysql会最大程度的使用缓存机制来提高数据库的访问效率,但是万一数据库发生断电,因为缓存的数据没有写入磁盘,导致缓存在内存中的数据 ...

  3. MySQL数据库InnoDB引擎下服务器断电数据恢复

    说明: 线上的一台MySQL数据库服务器突然断电,造成系统故障无法启动,重新安装系统后,找到之前的MySQL数据库文件夹. 问题: 通过复制文件的方式对之前的MySQL数据库进行恢复,发现在程序调用时 ...

  4. 面试官:为什么Mysql中Innodb的索引结构采取B+树?

    前言 如果面试官问的是,为什么Mysql中Innodb的索引结构采取B+树?这个问题时,给自己留一条后路,不要把B树喷的一文不值.因为网上有些答案是说,B树不适合做文件存储系统的索引结构.如果按照那种 ...

  5. MySQL中InnoDB锁不住表的原因

    MySQL中InnoDB锁不住表是因为如下两个参数的设置: mysql> show variables like '%timeout%'; +-------------------------- ...

  6. mysql 中 innoDB 与 MySAM

    mysql 中 innoDB 与 MyISAM 的特点 --ENGINE = innodb 1.提供事务处理,支持行锁: 2.不加锁读取,增加并发读的用户数量和空间: 3. insert/update ...

  7. MySQL的事务机制和锁(InnoDB引擎、MVCC多版本并发控制技术)

    一.事务(数据库的事务都通用的定义) 1.1 事务定义 事务是由一步或几步数据库操作序列组成逻辑执行单元,这系列操作要么全部执行,要么全部放弃执行.事务通常以 BEGIN TRANSACTION 开始 ...

  8. MySQL中InnoDB脏页刷新机制Checkpoint

    我们知道InnoDB采用Write Ahead Log策略来防止宕机数据丢失,即事务提交时,先写重做日志,再修改内存数据页,这样就产生了脏页.既然有重做日志保证数据持久性,查询时也可以直接从缓冲池页中 ...

  9. MySQL中MyISAM引擎及InnoDB引擎的缓存优化设计

    MyISAM引擎中,为了提高io效率以及读取效率,将对磁盘频繁读取的索引数据加载至内存中操作. MyISAM设计了一个在存放在内存中的索引缓冲池Key Cache.Key Cache只缓存索引数据,通 ...

随机推荐

  1. CORS与Django

    前言 在前后端分离项目中,如何解决跨域请求是一个必须要面对的问题.因为前端和后端的数据交互会被浏览器的同源策略所挟持,在很早之前我在博客园发了一篇文章,大概就说了一下如何简单粗暴的解决跨域. 其实那种 ...

  2. 获取url后面的参数

    function getQueryVariable(variable) { var query = window.location.search.substring(1); var vars = qu ...

  3. vscode搭建c++环境

    第一步:下载 Vs Code 点击链接下载Vs Code 下载版本  并安装 https://code.visualstudio.com/ 点击 Download for Windwos 安装时  如 ...

  4. shell 之 -f -z -e -o -a -d

    # -f 文件存在 if[ -f /etc/sysconfig/network ]; then ./etc/sysconfig/network fi # -z 字串为空/ -o or / -a and ...

  5. windows10 vs2017编译opencv_contrib3.4.7的小坑及编译好的资源

    1.注意要用正斜杠  /    不要用 \  https://github.com/opencv/opencv/issues/11655 CMake Error at cmake/OpenCVModu ...

  6. Vue2.x 响应式部分源码阅读记录

    之前也用了一段时间Vue,对其用法也较为熟练了,但是对各种用法和各种api使用都是只知其然而不知其所以然.最近利用空闲时间尝试的去看看Vue的源码,以便更了解其具体原理实现,跟着学习学习. Proxy ...

  7. 一:NOSQL

    NOSQL =not only SQL 意即为不仅仅是SQL 传统的关系数据库在处理web2.0网站,特别是超大规模和高并发的社交网络服务类型的web2.0纯动态网站已经显得力不从心,出现了很多难以克 ...

  8. linux开机启动及运行级别、root密码丢失、单用户模式只读的处理方法

    linux系统启动大致步骤如下:  加电自检-->根据BIOS中的设置从指定的设备启动-->找到设备MBR中的bootloader引导启动系统-->启动kernel-->启动i ...

  9. 腾讯云容器服务 TKE 推出新一代零损耗容器网络

    随着容器技术的发展成熟,越来越多的组件迁移到容器,在技术迁移过程中,数据库,游戏,AI 这些组件对容器网络性能(时延,吞吐,稳定性)提出了更高的要求.为了得到更优的时延和吞吐表现,各大云厂商都在致力于 ...

  10. REDHAT 7.5beta 新推出的VDO功能

    前言 关于VDO VDO的技术来源于收购的Permabit公司,一个专门从事重删技术的公司,所以技术可靠性是没有问题的 VDO是一个内核模块,目的是通过重删减少磁盘的空间占用,以及减少复制带宽,VDO ...