MySQL InnoDB存储引擎锁与事务实现原理解析(未完成)
创始人
2024-06-01 18:30:43
0次

InnoDB

MySQL存储引擎是基于表的,也就是说每张表可以选择不同的存储引擎。
InnoDB存储引擎的表是索引组织的,也就是数据即索引。

存储引擎文件

InnoDB引擎会包含RedoLog重做日志文件和TableSpace表空间文件。

表空间文件

默认表空间文件(共享表空间):一个10MB的ibdata1的文件,该文件能够自动增长。
共享表空间存放:撤销日志UndoLog、系统事务信息、双写缓冲

文件格式

  1. frm文件:存储表结构信息
  2. ibd文件:存储当前表的数据、索引、插入缓冲
参数配置
innodb_data_file_path: 指定默认表空间文件地址
innodb_file_per_table: 是否为每个表单独产生一个表空间

在这里插入图片描述

RedoLog文件

存储引擎默认重做日志文件:ib_logfile0和ib_logfile1。

重做日志:记录了InnoDB的事务日志,可以用于恢复日志(断电)

表数据的组织

在这里插入图片描述

主键问题

每张表必须要有主键,按照如下的三种方法选取主键

  • 显式定义主键
  • 选择非空唯一索引做主键
  • 自动创建6字节大小的指针主键

表空间tablespace

表空间用于存放表的数据、索引和插入缓冲。

段segment

表空间由各个段组成,常见的有数据段、索引段、回滚段。
数据段是B+树的叶节点段,索引段是B+树的非叶节点段。

区extent

区是64个连续的页组成的。1个区大小:16KB*64 = 1MB。

页page

页是InnoDB磁盘管理的最小单位,大小为16KB。
常见的页类型:

  1. 数据页
  2. Undo页
  3. 系统页
  4. 事务数据页
  5. 插入缓冲位图页
  6. 插入缓冲空闲列表页
  7. 未压缩的二进制大对象页
  8. 压缩的二进制大对象页

行

InnoDB是面向行的,即数据时按行存放的(也有列数据库如Hbase)。

InnoDB物理存储结构

行记录格式

Compact格式

  • 于MySQL5.0引入
    行的格式如下:
变长字段长度列表(按列逆序),NULL标志位,记录头信息,列1数据,列2数据,...,事务id,回滚指针,RowID(如果没有主键)

Redundant格式

  • MySQL5.0之前的版本,用于向前兼容
    行格式如下:
字段长度偏移列表(按列逆序),记录头信息,列1数据,列2数据...

锁

事务

参考文献

【1】MySQL技术内幕 InnoDB存储引擎 姜承尧
【2】MySQL技术内幕 第五版 Paul DuBois

相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...