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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 整体结构&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)为主键的聚簇索引。

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
9月前
|
存储 关系型数据库 MySQL
第9章 【MySQL】InnoDB的表空间
第9章 【MySQL】InnoDB的表空间
52 0
第9章 【MySQL】InnoDB的表空间
|
8天前
|
存储 关系型数据库 MySQL
MySQL数据库——InnoDB引擎-逻辑存储结构(表空间、段、区、页、行)
MySQL数据库——InnoDB引擎-逻辑存储结构(表空间、段、区、页、行)
22 7
|
30天前
|
存储 关系型数据库 MySQL
认真学习InnoDB的数据存储结构中的区、段与表空间
认真学习InnoDB的数据存储结构中的区、段与表空间
72 2
|
8月前
|
存储 关系型数据库 MySQL
MySQL使用InnoDB引擎时一张表最大可以储存数据大小为 64TB,那为什么当表中的单行数据达到16KB时,这张表只能储存一条数据?
MySQL使用InnoDB引擎时一张表最大可以储存数据大小为 64TB,那为什么当表中的单行数据达到16KB时,这张表只能储存一条数据?
|
关系型数据库 MySQL 测试技术
只有.frm和.ibd文件时如何批量恢复InnoDB的表---发表到爱可生开源社区
很多时候因为MySQL数据库不能启动而造成数据无法访问,但应用的数据通常没有丢失,只是系统表空间等其它文件损坏了,或者遇到MySQL的bug。
100 0
|
关系型数据库 数据库
Innodb表空间迁移
有cfg文件时表空间迁移 在源表上显示建表语句:
|
存储 关系型数据库 MySQL
一文带你了解MySQL之InnoDB表空间
通过前边的内容,相信大家都知道了表空间是一个抽象的概念,对于系统表空间来说,对应着文件系统中一个或多个实际文件;对于每个独立表空间来说,对应着文件系统中一个名为表名.ibd的实际文件。 大家可以把表空间想象成被切分为许多个页的池子,当我们想为某个表插入一条记录的时候,就从池子中捞出一个对应的页来把数据写进去。 本章内容会深入到表空间的各个细节中,带领大家在InnoDB存储结构的池子中畅游。由于本章中将会涉及比较多的概念,虽然这些概念都不难,但是却相互依赖,所以奉劝大家看的时候:不要跳着看
179 0
|
存储 关系型数据库 MySQL
一文带你了解MySQL之InnoDB表空间
通过前边的内容,相信大家都知道了表空间是一个抽象的概念,对于系统表空间来说,对应着文件系统中一个或多个实际文件;对于每个独立表空间来说,对应着文件系统中一个名为表名.ibd的实际文件。 大家可以把表空间想象成被切分为许多个页的池子,当我们想为某个表插入一条记录的时候,就从池子中捞出一个对应的页来把数据写进去。 本章内容会深入到表空间的各个细节中,带领大家在InnoDB存储结构的池子中畅游。由于本章中将会涉及比较多的概念,虽然这些概念都不难,但是却相互依赖,所以奉劝大家看的时候:不要跳着看
152 0
|
存储 关系型数据库 MySQL
MySQL InnoDB表和索引之聚簇索引与第二索引
MySQL InnoDB表和索引之聚簇索引与第二索引
67 0
|
存储 关系型数据库 MySQL
InnoDB 独立表空间与共享表空间
InnoDB 独立表空间与共享表空间
93 0
InnoDB 独立表空间与共享表空间