Data dictionary header(2) --系统表空间结构(三十四)

简介: Data dictionary header(2) --系统表空间结构(三十四)

前面说了系统表空间的整体结构,与独立表空间大致类似,多了五个特有的系统属性页,因为整个表空间只有一个系统表空间,所以他的重要性不言而喻,space id为0。

整体结构&InnoDB数据字典(1) --系统表空间结构(三十三)


Data dirctionary header


只要有四个基本表,就意味着可以获取其他系统表以及用户定义表的所有元数据。有表的名称之后:


可以从sys_table里获取到表的唯一table_id。

通过table_id可以在sys_columnts表里获取表的所有列信息。

通过table_id可以在sys_indexes表里获取到所有索引信息和index_id。

通过index_id可以到sys_filds表里获取到索引列的信息。

也就是这四个表是表中之表,那这四个表的元数据从哪里获取呢?没法搞了,于是系统空间结构表出来了第7个页面,data dirctionary header,也就是数据字典的头部信息,除了记录这些数据信息和索引信息,还记着整个innoDB的存储引擎一些全局属性。


file_header:文件头部,38个字节,页的一些通用信息。

data_dirctionary_header:数据字典头部信息,56个字节,记录着基本系统的根页位子和innoDB存储引擎的一些全局变量。

segment header:段头部信息,10个字节,记录着本页所在段对应的inode entry信息。

enpty space:尚未使用,16272字节,用于页结构的填充。

file trailer:文件尾部,8个字节,效验页是否完整。

这里可以看到我们熟悉的segment header,大家还记得这里存着什么吗,存着叶子节点段和非叶子节点段的inode entry表空间位子,所在页面号,和页面偏移量,而这些数据就存在这里。这里重点介绍一下data_dirctionary_header:

Max_row_id:当我们没有指定主键,也没有unique键,那么innoDB会生成一个名为row_id的列作为主键。因为是主键,所以不会重复,原则上一个表中只有一个唯一的row_id作为唯一键,不同表是可以相同的,不过innoDB只设计了换一个字段max_row_id,这个是全局共享,当哪个表插入一条数据,就是把max_Row_id的值记录到row_id的表中,再把max_row_id加1。

Max table id:全局的table_id,当建表时候,吧这个id给这个表,再把table_id加1。

Max_index_id:全局的索引id,因为索引也是唯一,当哪个表建立哪个索引,就把这个字段的值赋值给当前索引,再把max_index_id加1。

Max_space_id:每个表都对应一个表空间,表空间的唯一值就是取max_space_id,再把 max_space_id加1。

Max_id_low(unused):暂时没啥用。

Root_of_sys_tables_clust_index:本字段代表sys tables表聚簇索引的根页面的页号。

Root of sys_tables_ids sec index:本字段代表sys tables表为id 建立的二级索引的根页面的页号。

Root of sys_columns clust index:本字段代表sys_columns页聚簇索引的根页面页号。

Root of sys_indexes clust index:a本字段代表sys_indexes表聚簇索引根页面页号。

Root of sys_fields clust index:本字段代表sys_fileds表聚簇索引根页面页号。

Unused:暂时没用到。


Information_schema系统数据库


一般情况下,这些系统表是不可以访问的,但考虑到用户需要看着信息来分析问题,所以可以去信息模式 数据库下查看:

user information_chema;

show tables like ‘innodb_sys%’;

大家会发现查询出来的表是innodb_sys_tables,innodb_sys_columns等,严格来说查询出来的并不是系统表,系统表是我们前面说sys开头的表,这些是记录系统表数据的时候,填充进来innodb_sys表的,但这些数据足够我们排查问题了。


相关文章
|
1月前
Transparent Data Encryption Data Dynamic and Data Dictionary Views You can query a set of dynamic and data dictionary views to find more information about Transparent Data Encryption (TDE) data.
Transparent Data Encryption Data Dynamic and Data Dictionary Views You can query a set of dynamic and data dictionary views to find more information about Transparent Data Encryption (TDE) data.
11 2
|
4月前
|
关系型数据库 MySQL
MySQL 报错 [ERROR] [FATAL] InnoDB: Table flags are 0 in the data dictionary but the flags in file
MySQL 报错 [ERROR] [FATAL] InnoDB: Table flags are 0 in the data dictionary but the flags in file
348 0
|
存储 SQL 缓存
MySQL 深潜 - 一文详解 MySQL Data Dictionary
# 背景 在 MySQL 8.0 之前,Server 层和存储引擎(比如 InnoDB)会各自保留一份元数据(schema name, table definition 等),不仅在信息存储上有着重复冗余,而且可能存在两者之间存储的元数据不同步的现象。不同存储引擎之间(比如 InnoDB 和 MyISAM)有着不同的元数据存储形式和位置(.FRM, .PAR, .OPT, .TRN and .TR
328 0
|
存储 SQL 缓存
MySQL 深潜 - 一文详解 MySQL Data Dictionary
在 MySQL 8.0 之前,Server 层和存储引擎(比如 InnoDB)会各自保留一份元数据(schema name, table definition 等),不仅在信息存储上有着重复冗余,而且可能存在两者之间存储的元数据不同步的现象。不同存储引擎之间(比如 InnoDB 和 MyISAM)有着不同的元数据存储形式和位置(.FRM, .PAR, .OPT, .TRN and .TRG files),造成了元数据无法统一管理。此外,将元数据存放在不支持事务的表和文件中,使得 DDL 变更不会是原子的,crash recovery 也会成为一个问题。
814 0
MySQL 深潜 - 一文详解 MySQL Data Dictionary
|
存储 SQL 缓存
MySQL 深潜 - 一文详解 MySQL Data Dictionary
在 MySQL 8.0 之前,Server 层和存储引擎(比如 InnoDB)会各自保留一份元数据(schema name, table definition 等),不仅在信息存储上有着重复冗余,而且可能存在两者之间存储的元数据不同步的现象。不同存储引擎之间(比如 InnoDB 和 MyISAM)有着不同的元数据存储形式和位置(.FRM, .PAR, .OPT, .TRN and .TRG files),造成了元数据无法统一管理。此外,将元数据存放在不支持事务的表和文件中,使得 DDL 变更不会是原子的,crash recovery 也会成为一个问题。
MySQL 深潜 - 一文详解 MySQL Data Dictionary
艾伟:[原创]谈谈WCF中的Data Contract(3):WCF Data Contract对Collection & Dictionary的支持
在本篇文章上一部分Order Processing的例子中,我们看到原本已Collection形式定义的DetailList属性(public IList DetailList),在Data Contract中却以Array的方式体现(public OrderDetail[] DetailList)。
813 0
|
SQL 存储 关系型数据库
MySQL · 8.0新特性 · New data dictionary尝鲜篇
众所周知,由于MySQL采用统一Server层+不同的底层引擎插件的架构模式,在Server层为每个表创建了frm文件,以保存与表定义相关的元数据信息。然而某些引擎(例如InnoDB)本身也会存储元数据,这样不仅产生了元数据冗余,而且由于Server层和引擎层分别各自管理,在执行DDL之类的操作时,很难做到crash-safe,更别说让DDL具备事务性了。
8247 0
|
3月前
|
存储 Swift
在Swift编程语言中,字典(Dictionary)
在Swift编程语言中,字典(Dictionary)
34 3