代码编织梦想

innoDB ---- 一个程序员都应该了解的概念

1. innoDB逻辑存储结构

在这里插入图片描述

2. innoDB整体架构

2.1 内存架构

  • Buffer Pool

在这里插入图片描述

  • Change Buffer

在这里插入图片描述

  • Adaptive Hash index

在这里插入图片描述

  • log Buffer

在这里插入图片描述

2.2 磁盘结构

  • 系统表空间,每个表的单独表空间

在这里插入图片描述

  • 通用表空间

在这里插入图片描述

  • 双写缓冲区与redo log

在这里插入图片描述

2.3 后台线程

在这里插入图片描述

3. innoDB的事务原理

3.1 回顾事务的特性

ACID特性

原子性,一致性,隔离性,持久性

3.2 InnoDB保证这几种特性使用的机制

在这里插入图片描述

3.3 redo log保证事务持久性的方式

WAL (write Ahead Logging)

在这里插入图片描述

3.4 undo log保证事务原子性的方式

在这里插入图片描述

3.5 MVCC+锁 保证事务隔离性的方式 (看下一大节)

3.6 undo log+ redo log 保证事务一致性

4. InnoDB ——MVCC

多版本并发控制

4.1 相关概念回顾

  • 当前读

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

  • 快照读

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

    • Read Committed:每次select,都生成一个快照读
    • Repeatable Read:开启事务后第一个select语句才是快照读的地方
    • Serializable:快照读会退化为当前读。
  • MVCC

    全称为 Multi-Version Concurrency Control,多版本并发控制。指维护一个数据的多个版本,使得读写操作没有冲突,快照读为MYsql实现MVCC提供一个非阻塞读的功能。MVCC的具体实现,需要依赖于:

    • 三个隐式字段
    • undo log
    • readview

4.2 记录中的隐藏字段

在这里插入图片描述

(其中,DB_ROW_ID是可能没有的)

4.3 UNDO LOG日志

  • 回滚日志,在insert,update,delete的时候产生的便于数据回滚的日志
  • 在insert的时候,产生的undo log日志只会在回滚的时候需要,在事务提交之后,立即删除
  • 而update,delete的时候,产生的undo log日志不仅在回滚的时候需要,在快照读的时候也需要,不会被立即删除

4.4 UNDO LOG版本链

在这里插入图片描述

不同事务或相同事务对同一条记录进行修改,会导致该记录的undolog生成一条记录版本链表,链表的头部是最新的记录,链表尾部是最旧的日志。

4.5 MVCC-readview介绍

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

(也就是说,快照读到底要读哪个版本的数据呢,就是由readview决定的)

ReadView中包含的四个核心字段:

在这里插入图片描述

版本链数据访问规则

其中trx_id指的是,undolog版本链中每一个版本中的DB_TRX_ID字段

在这里插入图片描述

注意

不同的隔离级别,生成的ReadView的时机不同

  • Read Committed:在事务中每一次执行快照时生成ReadView
  • Repeatable Read:仅在事务中第一次执行快照读的时候生成readView,后续复用该readview。

😜 MVCC实验演示1

(RC 读提交隔离级别下的演示 : 在事务中每一次执行快照时生成ReadView)

自己看图琢磨一下

  • 已经提交的事务会从m_ids中剔除
  • min_trx_id: 上一次修改记录的事务id
  • max_trx_id: 下一次要修改事务的id(该id具有未来性,可能目前还没有这个事务)

在这里插入图片描述

😻MVCC实验演示2

(RR 可重复读隔离级别下的演示:仅在事务中第一次执行快照读的时候生成readView,后续复用该readview。)

在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_42392049/article/details/126917929

深入了解mysql存储引擎-------innodb_m0_37962600的博客-爱代码爱编程_innodb

如果想看自己的数据库默认使用的那个存储引擎,可以通过使用命令SHOW VARIABLES LIKE 'storage_engine'; 一、InnoDB存储引擎 1.InnoDB是事务型数据库的首选引擎,支持事务安全表(ACID) 事务的ACID属性:即原子性、一致性、隔离性、持久性                             a.原子性:原

Mysql-Innodb存储引擎体系架构-爱代码爱编程

1.Mysql体系结构 为了更好的理解Mysql,我们需要对Mysql的体系结构有一个大致的了解,下面是Mysql体系结构图以及各部分说明. 结构说明Connectors不同语言中与SQL的交互Management Services & Utilities管理服务和工具组件,例如备份恢复、MySQL复制、集群等Connection Pool连接

mysql 存储引擎 只读_mysql8 参考手册--将InnoDB配置为只读操作-爱代码爱编程

您可以InnoDB通过--innodb-read-only在服务器启动时启用配置选项来查询MySQL数据目录位于只读介质上的表 。 如何启用 要为只读操作准备实例,请确保将所有必需的信息刷新 到数据文件,然后再将其存储在只读介质上。在禁用更改缓冲(innodb_change_buffering=0)的情况下运行服务器,并执行慢速关机。 要为整个M

2021MySql-8.0.26安装详细教程(保姆级)-爱代码爱编程

MySql-8.0.26安装详细教程保姆级 下载安装包安装配置配置环境变量 下载安装包 下载安装包: 下载网址: https://dev.mysql.com/downloads/ 选择这个进入后选择直接下载第一个点击这里,开始下载 安装配置 解压安装包 我这里解压到d盘 打开编写MySQL配置文件 在解压目录下新建my.ini文件 将下面