一、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缓存机制
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

最新文章

  1. 个人对B/S项目的一些理解(三)--Servlet与Strust
  2. 编译原理词法分析 java简单实现
  3. getchar的利用
  4. 学习Data Science/Deep Learning的一些材料
  5. Unity3D在IOS上的优化小结
  6. hdu Hike on a Graph
  7. js !!条件判断或运算的作用
  8. 信号处理基础概念比较----频谱vs功率谱vs能谱
  9. 项目中用到的window.showModalDialog(来自网络)
  10. 一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库 RxJava,相当好
  11. 如何安装mysql-5.5.29-win32.zip
  12. PHP中zlib扩展实现GZIP压缩输出各种方法总结
  13. 【HTML5】DOMContentLoaded事件
  14. ctp交易平台转java接口转换
  15. ArcGIS JS API多线程克里金插值
  16. day 23-1 类的命名空间、组合
  17. markdown反射型xss漏洞复现
  18. Let’s Encrypt 通配符证书申请配置
  19. ios不触发事件也能播放音频
  20. 网络通信socket连接数上限

热门文章

  1. 对Spark硬件配置的建议
  2. SpringBoot魔法堂:说说带智能提示的spring-boot-starter
  3. 329. Longest Increasing Path in a Matrix(核心在于缓存遍历过程中的中间结果)
  4. 极客mysql03
  5. TCP/IP协议图解
  6. ceph luminous 新功能之内置dashboard
  7. 记一次ceph的故障修复(20160408)
  8. CSS浮动和清除浮动
  9. C函数 printf 拼接字符串
  10. Nacos一致性算法