10.2 InnoDB系统表空间 (gold_axe)

实际文件

数据目录下 有个 ibdata1 就是系统表空间

看数据目录SHOW VARIABLES LIKE 'datadir';

系统表空间实际文件

每个文件夹对应一个数据库, 选中的是系统数据库,文件夹名就是数据库名, 里面有几个 文件表名.ibd 是独立表空间实际放数据的文件

系统数据库

系统数据库有4个,除了图中选中的三个外 还有information_schema这个系统数据库

4个系统数据库

系统表空间 的数据结构

系统表空间 Space ID 是0
是记录整个系统的元数据的
和普通的表空间 , 在结构上的差异就是 表空间的 第一组的 3~7 号页(0 1 2 页和独立表空间类型也是一样的)


information_schema

如上文所述, 4个系统数据库里面 只有information_schema 没有对应的文件夹
因为它就没自己的数据

在存储引擎启动的时候,会读取 真的系统内部表(SYS开头的表), 填充到information_schema系统数据库里面的INNODB_SYS开头的表里面

内部系统表(也叫数据字典)

数据库除了我们自己插入的信息外, 还需要保存许多额外的数据才能运行
比如 有哪些库, 表,列,每个表的索引,外键, 表空间对应哪个文件路径
这些数据称为元数据
记在 内部系统表 (也叫数据字典)里面,
有很多内部系统表, 以下4个最重要
SYS_TABLES 整个InnoDB存储引擎中所有的的信息
SYS_COLUMNS 整个InnoDB存储引擎中所有的的信息
SYS_INDEXES 整个InnoDB存储引擎中所有的索引的信息
SYS_FIELDS 整个InnoDB存储引擎中所有的索引对应的列的信息

这些内部系统表的元数据 直接硬编码在代码里面
这4个表的 索引的根节点 记在 系统表空间的 7号页面(就是第八页)上


这页的类型是 SYS , 我们给它取名叫 data directory header 页

data directory header 页

data directory header

  • Max Row ID:不论哪个拥有row_id列的表插入一条记录时,该记录的row_id列的值就是Max Row ID对应的值,然后再把Max Row ID对应的值加1,也就是说这个Max Row ID是全局共享的。

  • Max Table ID:用于记录表号 最大到哪了

  • Max Index ID:用于记录索引号 最大到哪了

  • Max Space ID:用于记录表空间号 最大到哪了

  • 4个基本表对应的根节点

Segment Header


和每个根节点页的page header里面的2个Segment Header是一样的, 都是用于找到段对应的INODE Entry
INODE Entry主要记载了 段对应的3条链表在哪, 段对应的零散页是哪几个

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • MySql--InnoDB的表空间 具体细节 请去掘金购买《MySQL 是怎样运行的:从根儿上理解 MySQL》 ...
    简书徐小耳阅读 2,545评论 0 1
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,446评论 0 9
  • 今天看到一位朋友写的mysql笔记总结,觉得写的很详细很用心,这里转载一下,供大家参考下,也希望大家能关注他原文地...
    信仰与初衷阅读 4,759评论 0 30
  • pyspark.sql模块 模块上下文 Spark SQL和DataFrames的重要类: pyspark.sql...
    mpro阅读 9,504评论 0 13
  • 突然间,你就出现在我眼前, 不经意,你就已经攻城略地, 无声,沦陷。 有些事,我懂,你不了解, 我不能说,只能用肢...
    005f32f12821阅读 176评论 0 2