1.逻辑存储结构

下图是InnoDB的逻辑存储结构

2.架构

MySQL5.5版本开始,默认使用InnoDB存储引擎,它擅长事务处理,具有崩溃恢复特性,在日常开发中使用广泛。下图是InnoDB架构图,左侧为内存结构,右侧为磁盘结构。

2.1、内存结构

①Buffer pool:在执行增删改查操作时,先操作缓冲池中的数据,(缓冲池没有数据,再去磁盘加载并缓存在缓冲池中),然后再以一定的频率刷新到磁盘中,减少磁盘IO,加快处理速度。

缓冲池以page为单位,底层采用链表数据结构管理page。

②change buffer:更改缓冲区(针对非唯一的二级索引页)。在执行DML语句时,如果数据不存在于Buffer pool,就把数据从磁盘加载到更改缓冲区,在更改缓冲区完成操作后,以一定的频率刷新到Buffer pool,再由Buffer pool刷新到磁盘。二级索引的DML操作是主键乱序插入的,频繁乱序的磁盘IO会大大减低处理速度,这就是change buffer存在的意义。

③Adaptive Hash Index:自适应hash索引,用于优化buffer pool数据的查询。

④log buffer:日志缓冲区。用来保存要写入磁盘的log日志(redo log、undo log),默认为16M,日志缓冲区的日志会定期刷新到磁盘。可以通过增加日志缓冲区的大小来减少磁盘IO。

参数:

innodb_log_buffer_size:缓冲区大小

innodb_flush_log_at_trx_commit:刷新日志时机(0:每次事务提交时刷新到磁盘;1:每秒刷新到磁盘;2:日志在每次事务提交后写入,并每秒刷新到磁盘)。

2.2、磁盘结构

①system tablespace:系统表空间是更改缓冲区的存储区域。

②file-per-table tablespace:每个表的文件表空间。每一张表都会生成一个独立的表空间文件。

③general tablespaces:通用表空间,默认不存在,但可以手动创建,手动指定关联。

④doublewrite buffer files:双写缓冲区。InnoDB引擎将数据页从buffer pool刷新到磁盘前,先将数据页写入双写缓冲区文件中,便于系统异常时恢复数据。

⑤undo tablespace:撤销表空间,MySQL实例在初始化时会自动创建两个默认的undo表空间(大小默认16M),用于存储undo log。

⑥temporary tablespaces:临时表空间,用于存放临时表等数据。

⑦redo log:重做日志,用来实现事务的持久性。当事务提交之后,会把所有修改信息都存到该日志中,用于在刷新脏页到磁盘发生错误时,进行数据恢复使用。

2.3、后台线程

3.事务原理

3.1、redo log

重做日志,记录的是事务提交时数据页的物理修改,是用来实现事务的持久性。

3.2、undo log

原子性:undo log

持久性:redo log

一致性:undo log +redo log

隔离性:锁+MVCC

4.MVCC

基本概念:

三个隐藏字段:

undo log版本链 :

DB_TRX_ID:事务ID(自增)。

DB_ROLL_PTR:回滚指针(指向前一个事务的地址)。

readview :

MySQL之InnoDB存储引擎相关推荐

  1. 在MySQL的InnoDB存储引擎中count(*)函数的优化

    转载自  在MySQL的InnoDB存储引擎中count(*)函数的优化 写这篇文章之前已经看过了很多数据库方面的优化内容,大部分都是加索引.使用事务.要什么select什么等等.然而,只是停留在阅读 ...

  2. 【MySQL】InnoDB存储引擎

    [MySQL]InnoDB存储引擎 1 存储引擎的种类 常见的有三种: 存储引擎 说明 InnoDB 5.5 版本后 MySQL 的 默认数据库存储引擎,支持事务和行级锁 ,比 MyISAM 处理,速 ...

  3. MySQL的InnoDB存储引擎中,缓冲池中的Changer Buffer与系统表空间中的Changer Buffer的关系

    MySQL的InnoDB存储引擎中,缓冲池中和系统表空间中都存在Changer Buffer,那它们之间的关系是怎样的呢?先来一张InnoDB存储引擎的架构图: 翻阅了MySQL官网发现如下: 1.h ...

  4. linux mysql innodb_MySQL innoDB 存储引擎学习篇

    master thread的县城优先级别最高.其内部由几个循环(loop)组成:主循环(loop).后台循环(background loop).刷新循环(flush loop).暂停循环(suspen ...

  5. mysql+如何开发存储引擎_干货!MySQL 的 InnoDB 存储引擎是怎么设计的?

    MySQL 里还有什么其他成员呢? 对于 MySQL,要记住.或者要放在你随时可以找到的地方的两张图,一张是 MySQL 架构图,另一张则是 InnoDB 架构图: 遇到问题,或者学习到新知识点时,就 ...

  6. mysql技术innodb存储引擎读后感_《Mysql技术内幕-InnoDB存储引擎》读书笔记 (一)...

    @(Mysql) 官方数据库 下载 导入/data/mysql57/bin/mysql --socket /data/mysql3306/mysql.socket -uroot -ppassword1 ...

  7. mysql:innodb存储引擎之表结构

    文章目录 主键 表结构 表空间(tablespace) 段(segment) 区(extent) 页(page) 页结构 File Header(文件头) Page Header(页头) Infimu ...

  8. 数据库的四种事物隔离级别(基于MySQL的InnoDB存储引擎)

    准备工作 创建一个表,并插入几条基础数据 CREATE TABLE `transaction_isolation` (`id` bigint(10) NOT NULL AUTO_INCREMENT,` ...

  9. MySQL默认 InnoDB 存储引擎 详解

    1.8.1 介绍 数据库存储引擎是数据库底层组件,数据库管理系统使用数据引擎进行创建.查询.更新和删除数据操作.不同的存储引擎提供不同的存储机制.索引技巧.锁定水平等功能,使用不同的存储引擎还可以获得 ...

  10. mysql技术innodb存储引擎读后感_《MySQL技术内幕:InnoDB存储引擎》读书笔记.

    一.MySQL 体系架构和存储引擎 1.MySQL 被设计成一个单进程多线程架构的数据库,MySQL 数据库实例在系统上的表现就是一个进程. 2.MySQL 的体系架构,需要特别注意的是,存储引擎是基 ...

最新文章

  1. 计算机视觉与深度学习 | OpenCV3.0.0及高版本安装文件(build/sources)及视频教程
  2. matlab比例环节仿真例子,典型环节的MATLAB仿真
  3. cacti安装配置详解_MySQL实战001:8.0免安装版服务配置详解
  4. php授权验证系统源码-全解开源版
  5. wepy小程序踩坑-未发现相关 sass/less 编译器配置,请检查wepy.config.js文件
  6. LeetCode 94. Binary Tree Inorder Traversal
  7. Visual Studio 开发环境安装与配置
  8. 声明式编程思想和EEPlat
  9. 2021SC@SDUSC——使用CUDA/GPU技术加速密码运算(一)
  10. 相关滤波目标追踪一:鼻祖Mosse算法的matlab解析
  11. Windows Azure AppFabric (一) 平台简介
  12. 卡巴斯基激活码 卡巴斯基2010激活码下载
  13. 数独认识、规则及玩法技巧(python实现自动数独算法之二)
  14. 【分库分表ShardingSphere】
  15. 4芯网线接法(电话线接网线水晶头)
  16. 微信十年,张小龙教给我们的产品方法论!(教科书一般的经典)
  17. 禁用U盘!隐藏盘符和禁止查看
  18. Long类型的数据转换
  19. 分支限界法求解旅行商问题(TSP)
  20. DOS下安装WinXP方法

热门文章

  1. 数据包络分析方法与maxdea软件_数据包络模型 DEA三阶段超效率SBM非期望
  2. turbo c用C语言编写窗口,Turbo C 2.0使用教程(使用Turbo C 2.0编写C语言程序)
  3. 电子书及阅读器Demo
  4. ArcgisPro3.0.1中文安装包下载及安装教程
  5. 基于MCS-51单片机的数字时钟设计
  6. shell输出重定向
  7. mapxtreme 论坛_会议纪要 | 取栓论坛 云端论剑 大梗死核心取栓专场 精华回顾
  8. Visio搜索形状显示无匹配项的解决方法
  9. 从神话诗歌到奇幻科学的人类探索史·《月亮》·三
  10. WEB前端-CSS精灵技术