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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 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)为主键的聚簇索引。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
6月前
|
存储 缓存 关系型数据库
MySQL的varchar水真的太深了——InnoDB记录存储结构
varchar(M) 能存多少个字符,为什么提示最大16383?innodb怎么知道varchar真正有多长?记录为NULL,innodb如何处理?某个列数据占用的字节数非常多怎么办?影响每行实际可用空间的因素有哪些?本篇围绕innodb默认行格式dynamic来说说原理。
953 6
MySQL的varchar水真的太深了——InnoDB记录存储结构
|
6月前
|
存储 关系型数据库 MySQL
MySQL InnoDB数据存储结构
MySQL InnoDB数据存储结构
|
6月前
|
存储 关系型数据库 MySQL
认真学习InnoDB的数据存储结构
认真学习InnoDB的数据存储结构
75 0
|
6月前
|
存储 算法 关系型数据库
InnoDb行格式、数据页结构、索引底层原理和如何建立索引
InnoDb行格式、数据页结构、索引底层原理和如何建立索引
117 0
|
7天前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL InnoDB的表空间
InnoDB是MySQL默认的存储引擎,主要由存储结构、内存结构和线程结构组成。其存储结构分为逻辑和物理两部分,逻辑存储结构包括表空间、段、区和页。表空间是InnoDB逻辑结构的最高层,所有数据都存放在其中。默认情况下,InnoDB有一个共享表空间ibdata1,用于存放撤销信息、系统事务信息等。启用参数`innodb_file_per_table`后,每张表的数据可以单独存放在一个表空间内,但撤销信息等仍存放在共享表空间中。
|
5月前
|
存储 关系型数据库 分布式数据库
PolarDB产品使用问题之如何用InnoDB引擎创建Federated表
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
51 1
|
5月前
|
存储 算法 关系型数据库
【MySQL技术内幕】4.4-InnoDB数据页结构
【MySQL技术内幕】4.4-InnoDB数据页结构
111 1
|
5月前
|
存储 关系型数据库 MySQL
MySQL数据库——InnoDB引擎-逻辑存储结构(表空间、段、区、页、行)
MySQL数据库——InnoDB引擎-逻辑存储结构(表空间、段、区、页、行)
107 7
|
5月前
|
缓存 关系型数据库 MySQL
MySQL数据库——InnoDB引擎-架构-内存结构(Buffer Pool、Change Buffer、Adaptive Hash Index、Log Buffer)
MySQL数据库——InnoDB引擎-架构-内存结构(Buffer Pool、Change Buffer、Adaptive Hash Index、Log Buffer)
98 3
|
5月前
|
存储 关系型数据库 MySQL
【MySQL技术内幕】4.2-InnoDB逻辑存储结构
【MySQL技术内幕】4.2-InnoDB逻辑存储结构
48 0