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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: 整体结构&InnoDB数据字典(1) --系统表空间结构(三十三)

前面说了xdes 类型页面,第一页的extent0里面的xdes页面叫做fsp 因为里面还存着表空间的数据file space header,这里面主要存着xdes entry几个链表的基点,和inode entry链表的基点,后面的每个组第一页都是xdes类型页面。

Extent0里面还有inode类型页面,这里面主要存着seg_inode_free和seg_inode_full两个链表存储着inode entry,他们的基点也在file space header。

Segment header因为每个索引都有两个段,这个记录着每个段的区别,属于哪个段。

原创 Xdes&Inode&Seg Header(6) 独立表空间结构(三十二)


系统表空间整体结构


了解独立表空间后,现在来看系统表空间,因为mysql进程整体只有一个系统表空间,来额外记录整个系统的信息,所以系统表空间你比较猛,相当于表空间之首,他的space id表空间id为0。


Extent0:

FSP HDR:16个 字节。

IBUF_BITMAP:16个字节。

INODE:16个字节。

Sys insert buffer header:16个字节。

Index inset buffer boot:16个字节。

Trx_sys:16个字节。

Sys first rollback segment:16个字节。

Sys data directory header:16个字节。

Extent1和extent2:

Xdes:16个字节。

Ibuf_bitmap:16个字节。


由上可以看到,系统表空间和独立表空间有很多相同之处,在第一个页多了5个参数,其他的FSP hdr里面有file space header 里面存着表空间的直属信息,比如链表的基点等,还有与xdes 一样的信息,xdes里面存着管理区的各种链表,free,free_frag,full_frag,fseg。

Inode类型存着段的一些信息,段的头部和尾部信息,之前file page也有这种尾部信息,效验文件是否完整。还有三个链表,free,not_full,full(所以到目前为止,我们知道有两个地方需要效验文件是否完整,一个是file header,一个是inode类型的页面)

接下来我们重点看多出来的五个部分。


insert buffer header: sys类型,存储insert buffer 的头部信息。

insert buffer root index类型,存储insert buffer的根页面。

transaction system:trx_sts类型,事务系统的相关信息。

First rollback segment:sys类型,第一个回滚页面。

Data dictionary header:sys类型,数据字典头部信息。

除了记录系统属性页面外,系统表空间的extent1和extent2这两个区,我们之前说过一个区有64个页面,所以这128个页面在64~191的页面称为Doublewrite buffer,也就是双写缓冲区,这里面知识涉及到事务和多版本控制,后面的文章会 详细介绍。


InnoDB数据字典

我们平时用insert语句插入的数据称为真实数据,或者用户数据。当我们向表里插一条数据的时候,mysql会先效验表存不存在,存入的格式是否正确,如果语法没有问题的话,还需要知道该表的聚簇索引和二级索引在哪个根页面和表空间系统的哪个页面,然后把数据插入对应的b+树节点中。所以说,mysql除了存储插入的用户数据外,还有许多额外数据需要存储。


表属于哪个表空间,表里面多少列。

表对应每个列的类型。

该表有多少索引,每个索引对应哪几个字段,该索引对应的根页面在哪个表空间的哪个页面。

该表多少外键,外键对应哪些表哪些列。

某个表空间对应文件系统上的文件路径是什么。

。。。等等

上面这些数据都不是我们insert插入的数据,实际是为了mysql更好管理用户数据的数据,我们称这些数据为元数据,mysql特定用内部系统表(internal system table)来记录这些元数据。


sys_tables:整个innoDB引擎中所有表信息。

sys_columns:整个innoDB引擎中所有列信息。

sys_indexes:整个innoDB引擎中所有索引信息。

sys_fields:整个innoDB引擎中所有索引对应的列信息。

sys_Foreign:整个innoDB引擎中所有的外键信息。

sys_foreign_cols:整个innoDB引擎中所有外键对应的列信息。

sys_tablespaces:整个innoDB存储引擎所有的表空间信息。

sys_datafiles:整个innoDB存储引擎所有表空间对应的文件系统文件信息。

sys_virtual:整个innoDB存储引擎中所有虚拟生成列信息。

这些系统表称为数据字典,他们以b+树的形式存在表空间的某些页面,其中sys_table,sys_columns,sys_indexes,sys_fields四个称为基本系统表(basic system tables)。


sys_table

name:表名称。

id:每个表的唯一id。

n_cols:该表拥有列的个数。

type:表的类型,记录了一些文件格式,行格式,压缩等。

mix_id:已过时,忽略。

mix_len:表的一些额外属性。

cluster_id:未使用。

space:该表所属的对应表空间。

Sys_table有两个索引,以name列为主键的聚簇索引,以id列建立的二级索引。


sys_columns表

table_id:该列所属表对应的id。

pos:该列在表中第几列。

name:该列的名称。

mtype:全称main data type,主数据类型,就是int,char,varchar,double等之类的。

prtype:precise type,精确数据类型,修饰主类数据的数据,比如是否允许为null,是否有默认值。

LEN:该列最多占用的存储空间字节数。

PREC:该列的精度,默认都是0。

这个sys_columns表只有一个联合索引(table_id,pos)为主键的聚簇索引。


Sys_indexes表

table_id:该索引对应的表id。

id:每个索引都有一个唯一的id。

name:索引的名称。

n_fields:该索引包含列的个数。

type:该索引的类型,比如聚簇索引,唯一索引,更改缓冲区索引,全文索引,普通的二级索引等各种类型。

space:该索引根页面所在的表空间id。

page_no:该索引根页面所在的页面号。

merge_threshold:如果页面记录被删除到某个比例,就把该页面和相邻页面合并,该字段就是某个比例

Sys_fields表

index_id:索引列所属的id。

pos:该索引列在某索引第几列。

col_name:该索引列的名称。

Sys_fields表只有一个聚集索引,以(index_id,pos)为主键的聚簇索引。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
存储 缓存 关系型数据库
MySQL的varchar水真的太深了——InnoDB记录存储结构
varchar(M) 能存多少个字符,为什么提示最大16383?innodb怎么知道varchar真正有多长?记录为NULL,innodb如何处理?某个列数据占用的字节数非常多怎么办?影响每行实际可用空间的因素有哪些?本篇围绕innodb默认行格式dynamic来说说原理。
1195 6
MySQL的varchar水真的太深了——InnoDB记录存储结构
|
存储 关系型数据库 MySQL
MySQL InnoDB数据存储结构
MySQL InnoDB数据存储结构
|
存储 关系型数据库 MySQL
认真学习InnoDB的数据存储结构
认真学习InnoDB的数据存储结构
130 0
|
存储 算法 关系型数据库
InnoDb行格式、数据页结构、索引底层原理和如何建立索引
InnoDb行格式、数据页结构、索引底层原理和如何建立索引
279 0
|
10月前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
本文介绍了MySQL InnoDB存储引擎中的数据文件和重做日志文件。数据文件包括`.ibd`和`ibdata`文件,用于存放InnoDB数据和索引。重做日志文件(redo log)确保数据的可靠性和事务的持久性,其大小和路径可由相关参数配置。文章还提供了视频讲解和示例代码。
332 11
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
|
10月前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL InnoDB的表空间
InnoDB是MySQL默认的存储引擎,主要由存储结构、内存结构和线程结构组成。其存储结构分为逻辑和物理两部分,逻辑存储结构包括表空间、段、区和页。表空间是InnoDB逻辑结构的最高层,所有数据都存放在其中。默认情况下,InnoDB有一个共享表空间ibdata1,用于存放撤销信息、系统事务信息等。启用参数`innodb_file_per_table`后,每张表的数据可以单独存放在一个表空间内,但撤销信息等仍存放在共享表空间中。
151 6
|
关系型数据库 数据库 存储
顺序读和InnoDB的数据组织
【7月更文挑战第7天】自增主键优化顺序读:保证数据物理排序,提升范围查询效率。InnoDB引擎中,主键决定数据在页的存储。当插入的数据引起页分裂,如从1、2、3、5、6、7插入4,会导致相邻逻辑页在磁盘上可能分散,影响性能。了解页结构深化数据库知识,面试时可根据情况深入讨论。
94 2
|
存储 关系型数据库 分布式数据库
PolarDB产品使用问题之如何用InnoDB引擎创建Federated表
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
160 1
|
存储 关系型数据库 MySQL
MySQL数据库——InnoDB引擎-逻辑存储结构(表空间、段、区、页、行)
MySQL数据库——InnoDB引擎-逻辑存储结构(表空间、段、区、页、行)
415 7
|
存储 算法 关系型数据库
【MySQL技术内幕】4.4-InnoDB数据页结构
【MySQL技术内幕】4.4-InnoDB数据页结构
250 1