• mysql中innodb引擎的mvcc机制和BufferPool缓存机制


     一、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)页数据读到缓存
    (2)在缓存执行数据更新
    (3)更新完缓存写undo-log文件,用于事务的数据回滚,事务隔离级别的实现
    (4)innodb写redo-log缓存 写入磁盘
    (5)执行器写入binlog文件并写入redo-log文件commit标记,标志事务提交完成,bin-log和redo-log数据同步
    (6)按照mysql的策略io线程将BufferPool的数据写入磁盘(顺序IO的速度远远大于随机IO)
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    centos7下查看端口是否被占用
    centos7通过yum安装redis
    centos7下mysql远程连接
    centos7通过yum安装JDK1.8
    Jwt系列2:使用
    Jwt系列1:简介
    Python基础语法
    排序
    利用MultipartFile来进行文件上传
    服务器端跳转和客户端跳转
  • 原文地址:https://www.cnblogs.com/jishuzhaiachong/p/14097134.html
Copyright © 2020-2023  润新知