MySQL InnoDB存储引擎

目录

1、逻辑存储结构

2、架构

内存结构

磁盘结构

后台线程

3、事务原理

4、MVCC

MVCC基本概念

MVC实现原理

总结


1、逻辑存储结构

  • 表空间    一个MySQL实例可以有多个表空间(xxx.ibd文件)用于存储户记录和索引
  •    段分为数据段、索引段、回滚段,InnoDB是索引组织表,数据段就是B+树的叶子结点,索引段就是非叶子结点。段用来管理多个区
  • 区    表空间的单元结构,每个区1M
  • 页    InnoDB存储引擎磁盘管理的最小单元,每个页16k
  • 行    InnoDB存储引擎数据是按行进行存放的

2、架构

MySQL5.5版本开始,默认使用InnoDB存储引擎,因为它擅长事务、具有崩溃恢复的特性

  • 内存结构

缓冲区可以有效降低磁盘IO操作

  • 磁盘结构

  • 后台线程

3、事务原理

事务:一组操作的集合,要么同时成功,要么同时失败

  •  redo.log

        该日志文件由两部分组成:重做日志缓冲重做日志文件前者在内存,后者在磁盘中。当事务提交后会把所有修改信息都存到该日志文件中,用于刷新脏页到磁盘,发生错误时,互进行数据恢复,保证了数据的持久性

  • undo.log

        回滚日志,用于记录数据被修改前的信息,作用:提供回滚和MVCC多版本并发控制,它是逻辑日志,并非是实际的记录(类似Redis AOF)

         Undo Log销毁:undo log在事务执行时产生,事务提交时,并不会立即删除,因为这些日志可能还用于MVCC

         Undo Log存储:undo log采用段的方式进行管理和记录,存放在rollback segment回滚段中,内部包含了1024个undo log segment

4、MVCC

MVCC基本概念
  • 当前读

读取的是记录的最新版本,读取时还要保证其他并发事务不能修改当前读记录

  • 快照读

简单的select(不加锁)就是快照读,读取的是记录数据的可见版本,有可能是历史数据

  • MVCC

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

MVC实现原理
  • 记录中的隐藏字段

DB_TRX_ID        最近修改事务ID

DB_ROLL_PIR        回滚指针,指向这条记录的上一个版本,用于配合undo Log日志

DB_ROW-_ID        隐藏主键,如果表结果没有指定主键,将会生成该隐藏字段

  • undo Log版本链

多个并发事务修改同一条记录,就会形成一个修改前的记录单链表

  • readView(数据版本读取的判断规则的集合)

ReadView(读视图)是快照读SQL执行时MVCC提取数据的依据,记录并维护系统当前活跃的事务(未提交)ID

总结

  • InnoDB逻辑存储结构

表空间、段、区、页、行

  • InnoDB架构

内存结构

磁盘结构

后台线程

  • 事务原理

A 原子性 undoLog

C 一致性 redoLog +  undoLog

I 隔离性 MVCC+锁

D 持久性 redoLog

  • MVCC

隐藏字段+undoLog版本链+ReadView

保证每一次快照读所读取的记录为某一个历史版本

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值